Merhaba,
İki gündür SDL2 ilintisini D'ye uyarlamaya çalışıyorum. Bir kaç sorun ile debelendikten sonra, sonunda aşağıda ekran görüntüsü bulunan ilk örneğimi çalıştırabildim...:-D
http://desmond.imageshack.us/Himg98/scaled.php?server=98&filename=ekrangrntstv.png&res=crop
Büyüğü için tıklayınız... (http://imageshack.us/photo/my-images/98/ekrangrntstv.png/)
Bu örneği (http://hg.libsdl.org/SDL/file/470bc1333b09/test/testspriteminimal.c) denemelisiniz! Çünkü ekrana yüzlerce dolaşan resim (-bknz. bunun kullandım ama SVG, BMP'ye çevirmelisiniz (http://www.clker.com/cliparts/j/y/B/I/m/J/sun-star-bw.svg)) rasgele basıyor ve bunlar ekran sınırları içerisinde istediğimiz hızda (MAX_SPEED) hareket ediyor. İsterseniz sayısını (NUM_SPRITES) da değiştirebiliyorsunuz...
Özellikle SVG'den temiz bir görüntü yansıtmak istedim. Amacım basit ama nitelikli (şeffaf) bir test yapmaktı. SDL2 hiç fena görünmüyor! Üstelik henüz yüzlerce işlevini deneme fırsatı bulabilmiş değilim...:)
Ama önce ilintiyi tamamlamalıyız; takıldığım bir kaç noktada yardımınıza ihtiyacım var:
-
Öncelikle bazı enum'lar isimsiz, bazıları isimli. İsimlileri de isimsiz yapmak gerekli mi? Çünkü ilintiler içinden bu değerler çağrıldığında isim ön ekini nokta ile beraber (örn. SDL_EventType.SLD_QUIT) kullanmamız gerekiyor. Oysa C ilintilerinde bu şart koşulmamış!
-
Belki de bu daha önceliklidir çünkü C'de define'lar ile tanımlanan işlev benzeri macro'lar var. Bunların basit olanlarını macro'yu dağıtarak hallediyorum ama karmaşıklar için işlev mi yazmamız gerekiyor? İşte bu en çok sıkıntı çektiğim nokta. Baksanıza adam tek satırda halletmiş ve ben can çekişmişim! Hadi iki satıra bölmüş diyelim, malum 80 sütuna sıkıştırma mevzusu...:)
Alıntı:
> //#define SDL_QuitRequested() \
> //(SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT)>0))
> bool SDL_QuitRequested() {
> SDL_PumpEvents();
> if(SDL_PeepEvents(null, 0, SDL_eventaction.SDL_PEEKEVENT,
> SDL_EventType.SDL_QUIT,
> SDL_EventType.SDL_QUIT) > 0) {
> return true;
> }
> return false;
> }
> ```
>
* Hoş typedef'ler de zaman zaman sıkıntı yapmıyor değil! Örneğin şunu doğru yaptığımı düşünsem de **sdl2d/events.d(501): Error: SDL_TimerCallback is used as a type** hatasını alıyorum...
Alıntı:
>
>
> //typedef int (SDLCALL * SDL_EventFilter) (void userdata, SDL_Event * event);
extern(C) int function(void userdata, SDL_Event* event) SDL_EventFilter;
>
Bunda da ama bunun derdi başka çünkü yanında bir işlev ve takma isim var:
Alıntı:
>> /**
> * Function prototype for the timer callback function.
> *
> * The callback function is passed the current timer interval and returns
> * the next timer interval. If the returned value is the same as the one
> * passed in, the periodic alarm continues, otherwise a new alarm is
> * scheduled. If the callback returns 0, the periodic alarm is cancelled.
> */
> typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param);
>
> /**
> * Definition of the timer ID type.
> */
> typedef int SDL_TimerID;
>
> /**
> * \brief Add a new timer to the pool of timers already running.
> *
> * \return A timer ID, or NULL when an error occurs.
> */
> extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval,
> SDL_TimerCallback callback,
> void *param);
> ```
>
Yukarıdaki ilintiyi şu şekilde D'ye uyarlayınca da aynı hatayı alıyorum...:(
extern(C) Uint32 function(Uint32 interval, void* param)SDL_TimerCallback;
alias int SDL_TimerID;
extern(C) SDL_TimerID SDL_AddTimer(Uint32 interval,
SDL_TimerCallback callback,
void* param);
Teşekkürler...
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]