August 28, 2009

Alıntı (canalpay):

>

İnşallah ... bir çok kişi bu olaya yabancı kalmaz

Hiç sanmıyorum. Amaçlardan biri öğrenmek olunca ve projenin arkasında böyle bir forum olunca her türlü soru yanıtlanır ve bence çok güzel öğrenilir.

D.ershane'de ilerledikçe, gerekirse oradaki sayfalara gönderme de yaparız...

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 30, 2009

Bu proje için clanlib kullanma konusunda biraz acele etmişim. Çünkü görünüşe göre clanlib uygulamalarında basit bir uygulama da aslında bir c++ sınıfından devralıyor. Bu nedenle clanlib'i d ile kullanmak zor gibi gözüküyor.

Bu yüzden başka bir alternatif aramaya başladım ve sdl kütüphanesini kullanmaya karar verdim. Bunun için eski adıyla build (yeni adıyla bud (http://www.dsource.org/projects/build/)) isimli bir araç kullanmak gerekiyormuş. Bildik şekilde

Alıntı:

>

make -f Makefile.unix

şeklinde kurmaya çalıştım. Ama bir sürü hata aldım.

Alıntı:

>

make -f Makefile.unix
dmd -op -release -inline -ofbuild build.d util/pathex_bn.d util/pathex.d source_bn.d util/str.d build_bn.d util/booltype.d util/fdt_bn.d util/str_bn.d source.d util/fdt.d util/fileex.d util/fileex_bn.d util/linetoken.d util/linetoken_bn.d util/macro.d util/file2.d
build.d(56): Identifier expected following package
build.d(56): ';' expected
build.d(634): identifier expected following '.', not 'macro'
build.d(3348): identifier expected following '.', not 'macro'
source.d(55): Identifier expected following package
source.d(55): ';' expected
source.d(105): Identifier expected following package
source.d(105): ';' expected
source.d(483): identifier expected following '.', not 'macro'
util/macro.d(38): Identifier expected following package
make: *** [build] Error 1

Daha sonra bunların artık macro kelimesinin bir özel kelime haline geldiği için olduğunu öğrendim. Bu macro kelimesi yerine farklı bir kelime kullanınca bu hatalar gitti. Daha sonra posix'le ilgili derleyici yakındı. O hatalar da bir şekilde düzeldi. Şimdi de şu hataları veriyor:

Alıntı:

>

make -f Makefile.unix
dmd -op -release -inline -ofbuild build.d util/pathex_bn.d util/pathex.d source_bn.d util/str.d build_bn.d util/booltype.d util/fdt_bn.d util/str_bn.d source.d util/fdt.d util/fileex.d util/fileex_bn.d util/linetoken.d util/linetoken_bn.d util/makro.d util/file2.d
util/linetoken.d(51): Error: cannot implicitly convert expression (",") of type immutable(char)[] to char[]
util/linetoken.d(51): Error: cannot implicitly convert expression ("//") of type immutable(char)[] to char[]
util/linetoken.d(51): Error: cannot implicitly convert expression ("\") of type immutable(char)[] to char[]
util/linetoken.d(71): Error: cannot implicitly convert expression (",") of type immutable(char)[] to dchar[]
util/linetoken.d(71): Error: cannot implicitly convert expression ("//") of type immutable(char)[] to dchar[]
util/linetoken.d(71): Error: cannot implicitly convert expression ("\") of type immutable(char)[] to dchar[]
make: *** [build] Error 1

Hata veren linetoken.d dosyasının ilgili kısımları şu şekilde.

module util.linetoken;
private import util.linetoken_bn;

private {
   static import std.ctype;
   static import std.string;
   static import std.utf;

}
char[][] TokenizeLine(char[] pSource,
                     char[] pDelim = ",",
                     char[] pComment = "//",
                     char[] pEscape = "\\")
{// <-- Derleyicinin tam olarak yakınmaya başladığı 51.satır burası
   dchar[][] lTemp;
   char[][] lResult;

   lTemp= TokenizeLine( std.utf.toUTF32(pSource),
                        std.utf.toUTF32(pDelim),
                        std.utf.toUTF32(pComment),
                        std.utf.toUTF32(pEscape) );
   foreach( dchar[] lLine; lTemp )
   {
       lResult ~= std.utf.toUTF8( lLine );
   }

   return lResult;
}

Bazıları da bud isimli aracın çok eski olduğunu söylüyorlar. Ben derleyici olarak dmd 2.0 kullandım. Sırf bunu derlemek için de derleyici değişikliğine gitmeyeyim diye düşündüm. Olmazsa artık dmd 1.0 sürümü bir derleyiciyle tekrar deneyeceğim..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 30, 2009

O hata mesajını tanıyorum. Çift tırnaklarla yazılan dizgiler D2'de değişmez oluyorlar. char[] dizgilerine atamak için .dup ile kopyalanmaları gerekiyor:

char[] benimki = "abc".dup;

Veya, TokenizeLine'ın parametreleri de immutable yapılabilir ve sonra toUtf32 çağrılırken .dup yapılır; vs...

D2 eski kodlarla çalışmak üzere tasarlanmamış; ben olsam D1 kodları üzerinde hiç uğraşmazdım. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 02, 2009

Alıntı (acehreli:1251661640):

>

D2 eski kodlarla çalışmak üzere tasarlanmamış; ben olsam D1 kodları üzerinde hiç uğraşmazdım. :)

Evet D1 sürümünü kullanınca bud derlendi ve kullanılabiliyor.

Clanlib'le ortaya çıkan problemler nedeniyle SDL derelict (http://www.dsource.org/projects/derelict) ve bud (http://www.dsource.org/projects/build/)üçlüsüyle artık D ile SDL uygulamaları geliştirebiliyorum.

Derleme işlemi pek kısa sayılmaz:

Alıntı:

>

bud resimyukle.d -I ~/dmd/src/ext/ -L-ldl -exec -op ~/dmd/src/ext/derelict/opengl/glx.d

Kaynak kod da bu şekilde.

import std.string;
import derelict.sdl.sdl;
import derelict.sdl.image;


// dikey ve yatay ekran cozunurlukleri
const int xCozunurluk = 480;
const int yCozunurluk = 480;

// ekranda her pikselde gosterilecek bit sayisi. 24=> gercek renk

const int pikselBitSayisi = 32;

SDL_Surface * ekran = null;
SDL_Surface * arkaplan = null;



SDL_Surface * resimYukle (char * dosyaIsmi)
{
   SDL_Surface * yuklenenResim = null;
   SDL_Surface * optimizeResim = null;
   yuklenenResim = IMG_Load (dosyaIsmi);
   if (yuklenenResim != null)
   {
       optimizeResim = SDL_DisplayFormat (yuklenenResim);
       SDL_FreeSurface (yuklenenResim);
   }
   return optimizeResim;
}

void yuzeyUygula (int x, int y, SDL_Surface * kaynak, SDL_Surface * hedef)
{
   SDL_Rect konum;

   konum.x = x;
   konum.y = y;

   SDL_BlitSurface (kaynak, null, hedef, &konum);
}


void ilklendir ()
{
   // SDL Derelict modulunu yukle
   DerelictSDL.load ();
   DerelictSDLImage.load ();


   // Tum SDL modullerini yukle
   SDL_Init (SDL_INIT_EVERYTHING);

   // penceremizi olusturuyoruz
   ekran = SDL_SetVideoMode (xCozunurluk, yCozunurluk, pikselBitSayisi,
                             SDL_SWSURFACE);
   SDL_WM_SetCaption (toStringz ("Pekemon :)"), null);
}

void kaynaklariGeriVer ()
{
   // SDL'e cikmasini soyle
   SDL_Quit ();

   // SDL tarafindan paylasilan kutuphaneyi geri ver
   DerelictSDL.unload ();
}

void main ()
{
   ilklendir ();
   arkaplan = resimYukle ("background.png");
   yuzeyUygula (0, 0, arkaplan, ekran);

   scope (exit) kaynaklariGeriVer (); // ciktigimiz zaman kaynaklari geri ver

 anaDongu:
   while (true)
   {
       SDL_Flip (ekran);

       SDL_Event olay;

       // bu dongu isletilirken ortaya cikabilecek tum olaylari isle
       while (SDL_PollEvent (&olay))
       {
           switch (olay.type)
           {
               // kullanici pencerenin kapatma tusuna tikladi
           case SDL_QUIT:
               break anaDongu;
               // varsayilan olarak hicbirsey yapmiyoruz switch=>den cik
           default:
               break;
           }
       }
   }

}

Hatta bir de ekran görüntüsü vereyim :)

http://img527.imageshack.us/img527/3240/ekran.png

Daha hangi projeye karar verdiğimiz belli olmadığı için şimdilik sadece arkaplanı çiziyor. Yorumlarınızı bekliyorum.

Bir ikincisi artık hangi proje üzerinde çalışacağımız konusunda karara vardık mı? Bunu merak ediyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 02, 2009

Güzel bir proje olabilir. Ama ilk olarak saf d ile kodlayacağımız bir proje olmalı. Hem anlaşılması daha kolay olur. Hemde ilk proje olacağı için böyle daha karmaşık bir projeye göre rahat ilerleriz. Ama hiçbir proje olmamasındansa böyle bir proje olması çok daha iyidir.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 02, 2009

Burda son bir kere daha forum üyelerine soruyorum. Emin misiniz? :)

Çünkü bir de işin şöyle bir yönü var. Sanırım grafik programlama olayına D biraz dolaylı şekilde kullanıyor. Bazı şeyler tam olgunlaşmamış gibi gözüküyor. Örneğin SDL kütüphanesini bile dolaylı olarak bu binding yapan ek kütüphaneler ile kullanıyor. Derleme aracı olarak kullandığı bud D1 sürümünde derleniyor. Ama D2 derleyicisi ile çalışıp çalışmadığı garanti değil. (Belki de Ali bey'in bildiği başka derleme yardımcıları vardır) Derelict'te bir problem yok gibi gözüküyor. Biraz önce bir resim dosyasından sprite'ları kesip buraya taşımayı daha sonra hareketlendirmeyi düşünüyordum. Tam olarak şöyle bir şey:

http://lazyfoo.net/SDL_tutorials/lesson06/sprites.jpg

Ama bir yerde program patladı. D'de kapsam çözünürlük (scope resolution) -> operatörü kullanılabiliyormuydu? Çok uğraşmamakla beraber ilk aklıma gelen o oldu. Aslında SDL kütüphanesi arkadaşların düşündüğü gibi zor değil aksine basit bir kütüphane. Hatta gerekirse SDL'le ilgili o aşamaya kadar işlevleri de anlatabilirim. Ama benim korktuğum bu dolaylı kullanımdan oluşabilecek hatalar..

Evet başlatıyorsak nerede nasıl başlatıyoruz? :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 02, 2009

Alıntı (erdem):

>

Ama bir yerde program patladı. D'de kapsam çözünürlük (scope resolution) -> operatörü kullanılabiliyormuydu? Çok uğraşmamakla beraber ilk aklıma gelen o oldu.

Evet tahmin ettiğim gibi sorunlar kapsam çözünürlük operatöründen kaynaklanıyormuş. -> olan kısımları (* ). olarak değiştirince sorun düzeldi.

İkincisi internette biraz araştırınca D ve SDL kullanılarak yapılan başka oyunlar da olduğunu gördüm. Örneğin Titanion (http://www.asahi-net.or.jp/~cs8k-cyu/windows/ttn_e.html) diye bir oyun..

http://www.asahi-net.or.jp/~cs8k-cyu/windows/ttn_1l.gif

Burda D ve SDL arasındaki bağlantı için D-porting (http://shinh.skr.jp/d/porting.html) isimli bir kütüphane kullanmışlar.

Japonlar yaptıysa bizim de yapmamız için bir neden yok diye düşünüyorum :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 02, 2009

Hmmm... Güzel... :)

Derleme komutu çok kısa aslında: make ;)

Şimdi bunu nerede nasıl başlatıyoruz? Başka projeler de olabilir tabii... Haydi başlasınlar bir yerde... :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 03, 2009

Alıntı (acehreli):

>
  1. Projenin kaynak kodu Türkçe mi olsun İngilizce mi? İkisinin de ayrı avantajları var.

Burada sanırım kaynak kodda kullandığımız değişken isimlerini falan kasdediyorsunuz. Ben tercihimi (her ne kadar bazı kelimelere örneğin =>blitting karşılık bulmak zor olsa da) Türkçeden yana kullanırım.

Proje'nin kaynak kodundan çok kendisi, açıklama sayfaları, dökümantasyonu (ki eğer öyle bir duruma gelirse :) çift dil destekleyecek şekilde olursa süper olur.

Alıntı (acehreli):

>
  1. Proje hosting için hangi siteyi kullanalım? Proje sitesi Türkçe olacaksa, bilinen Türkçe bir proje hosting sitesi var mı?

Ben şimdiye kadar hiç Türkçe proje sitesi duymadım.

Alıntı (acehreli):

>
  1. Proje sitesi Türkçe olmayacaksa, sürüyle proje hosting sitesinden tercih ettiğiniz bir tane var mı?

Burada da sağladığı özellikler nedir? ne değildir? tam bilmemekle beraber oyumu google code'dan yana kullanıyorum. Çünkü görünüm olarak sade ve hoş bir arayüz sunuyor. Örneğin:

http://code.google.com/p/itask-module/

Gene de bu konularda tercih tamamen sizin çünkü bu konuda deneyimli olan sizsiniz :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 03, 2009

Alıntı (erdem):

>

Burda D ve SDL arasındaki bağlantı için D-porting (http://shinh.skr.jp/d/porting.html) isimli bir kütüphane kullanmışlar.

Bu D-porting kütüphanesinin gerçekten kullanışlı olup olamayacağını denemek için kullanmaya çalıştım. Ama basit bir sdl programında bile şu hata mesajlarını veriyor:

Alıntı:

>

SDL_version_.d(66): Error: identifier 'bit' is not defined
SDL_version_.d(66): Error: bit is used as a type

Hata veren satır da burası.

bit SDL_VERSION_ATLEAST(Uint8 X, Uint8 Y, Uint8 Z)
{
	return (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z));
}

Burada anladığım kadarıyla geliştirici bit isimli bir tür kullanmış ama tanımlamayı mı unutmuş? Daha bunun gibi bir kaç tane daha aynı hata mesajından alıyorum. Bu soruyu emaille bu kütüphaneyi geliştiren kişiye de sordum.. Bakalım cevap verecekmi.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]