Jump to page: 1 2 3
Thread overview
SDL dersi için en basiti nasıl?
Aug 03, 2012
Salih Dinçer
Aug 03, 2012
erdem
Aug 03, 2012
erdem
Aug 03, 2012
erdem
Aug 03, 2012
Salih Dinçer
Aug 03, 2012
erdem
Aug 03, 2012
Salih Dinçer
Aug 03, 2012
erdem
Aug 03, 2012
erdem
Aug 03, 2012
Salih Dinçer
Aug 04, 2012
erdem
Aug 04, 2012
Salih Dinçer
Aug 04, 2012
erdem
Aug 04, 2012
Salih Dinçer
Aug 04, 2012
erdem
Aug 05, 2012
Salih Dinçer
Aug 05, 2012
erdem
Aug 05, 2012
Salih Dinçer
Aug 05, 2012
Salih Dinçer
Aug 05, 2012
erdem
Aug 05, 2012
Salih Dinçer
Aug 05, 2012
erdem
Aug 06, 2012
Salih Dinçer
Aug 06, 2012
erdem
August 03, 2012

Merhaba Erdem,

Bugün SDL derslerine niyetlendim. Her şeyi kitabına göre yapmalıydım. Yazılanları harfiyen uyguladım. GitHub bölgesini yerel dizinime indirmek için .tar.gz paketini açmayı denedim. Çünkü 'clone' olayında şöyle bir hata aldım:
Alıntı:

>

salih@NB:~/d.ders$ git clone git@github.com:erdemoncel/oyun.git
Cloning into oyun...
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Neyse konu bu hata değil ve belki küçük bir püf noktası. Aslında her şey tabiri caizse ağzımıza vermişsin. Ama ben hem balık tutmak istiyorum; hem de oltayı tutup kıpırtıları beklemek kadar basit bir iş icra etmek...:)

Dosyalar çok güzel organize edilemiş; dersler de! Kendi adıma teşekkür ederim. Ancak ben biraz eski kafalı olacağım ki bu kadar çok sınıf, yapı ve dosya ismi (import sdl, vector2, icerik, cizici, matematik, temelsekiller;) beni biraz ürküttü. Çünkü bu dosyaları ben oluşturmadım ve hakim de değilim...:(

Soruma gelince; acaba basit bir uzay gemisi (ship.bmp), soldan sağa doğru, bir foreach() döngüsü içinde pencere sınırına kadar gidip durması çok mu kod istiyor? Yani bana sdl dışında hiç bir bağımlılığı olmayan bir örnek lazım. Öyle bir örnek ki bütün olay main() içinde olup bitsin.

Son olarak bir şey daha isteyeceğim. Bu resim ya flip olsun ya da kendi çevresinde dönerek bu sefer sola doğru baksın. İşte bana bütün bunlar gemimizi hareket ettirmek için yeterli görünüyor. Ama açıkçası bu kadar çok dosya beni biraz ürkütüyor...

Sevgiler, saygılar...

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

August 03, 2012

Alıntı (Salih Dinçer):

>

Merhaba Erdem,

Bugün SDL derslerine niyetlendim. Her şeyi kitabına göre yapmalıydım. Yazılanları harfiyen uyguladım. GitHub bölgesini yerel dizinime indirmek için .tar.gz paketini açmayı denedim. Çünkü 'clone' olayında şöyle bir hata aldım:
Alıntı:

>

salih@NB:~/d.ders$ git clone git@github.com:erdemoncel/oyun.git
Cloning into oyun...
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Neyse konu bu hata değil ve belki küçük bir püf noktası.

Salihcim şimdi baktım. Bu ssh anahtarlarıyla uğraşmak zor geldiği için ben https kullanıyorum.

'$ git clone https://github.com/erdemoncel/oyun.git'

Diğer kısımlara henüz bakmadım :-) Hatırlatma için teşekkürler şimdi okubeni dosyalarını düzenledim.

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

August 03, 2012

Alıntı (Salih Dinçer):

>

Dosyalar çok güzel organize edilemiş; dersler de! Kendi adıma teşekkür ederim. Ancak ben biraz eski kafalı olacağım ki bu kadar çok sınıf, yapı ve dosya ismi (import sdl, vector2, icerik, cizici, matematik, temelsekiller;) beni biraz ürküttü.

Evet haklısın :-/ Maalesef burada ilk hatam projeyi sonuna kadar kodlamadan bir taraftan ders hazırlamak oldu.

Ama diğer taraftan SDL çok temel düzeyde bir grafik kütüphanesi. Örneğin sadece çizgi çizip daha sonra bundan temel şekiller üretebilmem için Bresenham'ın çizgi çizme algoritmasını öğrenmem gerekti.

http://www.cs.toronto.edu/~smalik/418/tutorial2_bresenham.pdf
http://www.webkinesia.com/games/sdl-turtle.php
http://free.pages.at/easyfilter/bresenham.html

Yani ekrana piksel piksel erişebiliyoruz.

https://github.com/erdemoncel/oyun/blob/master/src/cizici.d

https://github.com/erdemoncel/oyun/blob/master/src/temelsekiller.d

Alıntı (Salih Dinçer):

>

Soruma gelince; acaba basit bir uzay gemisi (ship.bmp), soldan sağa doğru, bir foreach() döngüsü içinde pencere sınırına kadar gidip durması çok mu kod istiyor? Yani bana sdl dışında hiç bir bağımlılığı olmayan bir örnek lazım. Öyle bir örnek ki bütün olay main() içinde olup bitsin.

Aslında belki bu kadar basit bir program için yazmak gerekmeyebilir. Ama evet ;-) Çünkü örneğin orada oyun nesnesinin oyun ekranının dışından taşmaması için burada da anlattığım gibi (http://ddili.org/ders/sdl/hareket.html) bir yöneyi bir eksen etrafında yansıtmak gerekiyor. Benim yazdığım örnekte çok temel yöney işlemleri var.

https://github.com/erdemoncel/oyun/blob/master/src/vector2.d

Ama dediğim gibi grafik programlama ya da oyun programlama programcılığın en zor alanlarından bir tanesi. Ve örnek olarak FIFA türünde 2D bir oyunun yapay zekasını kodlamak için binlerce, onbinlerce kod yazmak gerekiyor. Hatta sadece bir dosyayı örnek olarak göstermek istiyorum. Ki daha önce okuduğum Programming Game AI By Example kitabındaki sadece bir kaynak dosyası :-p

http://codepad.org/UwAYyPdP

Alıntı (Salih Dinçer):

>

Son olarak bir şey daha isteyeceğim. Bu resim ya flip olsun ya da kendi çevresinde dönerek bu sefer sola doğru baksın. İşte bana bütün bunlar gemimizi hareket ettirmek için yeterli görünüyor.

Aslında genel olarak görüşlerini haklı buluyorum. Çünkü o kütüphaneyi kodlarken bir nevi 2D oyun motoru gibi kodlamaya başlamıştım. Yani örneklerde gösterilmeyen örneğin sprite türü animasyonlar vs.. falan da olacaktı. Hatta bitseydi şunun gibi (http://create.msdn.com/en-US/education/tutorial/2dgame/getting_started) 2D bir uzay oyunu olacaktı.

Maalesef artık ilgimi kaybettiğim için devam edemiyorum :rolleyes: Ama istersen programcı olarak seni ekleyebilirim istediğin gibi kaynak kodu değiştirebilirsin.

Bir de bahsettiğin gibi sadece sdl ve ana program olacak şekilde tamamen oyunu kendin oluşturabilirsin. Bu durumda tek gereken şey C ilintilerinin olduğu 'sdl.d' kaynak dosyası. Bu arada Makefile dosyalarını incelersen aslında farklı örneklerin de olduğunu görebilirsin.

Burada çok basit anlatımlı SDL dersleri var. Bu dersleri takip ederek sdl.d dosyasını kullanarak istediğin gibi oyun ortamını kodlayabilirsin. Bir de alternatif olarak 2D oyun motorları var sanırım. Ama şu an hiç biri aklıma gelmedi. Eğer aklıma gelirse bu başlığa yazarım.

http://lazyfoo.net/SDL_tutorials/index.php

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

August 03, 2012

Bir de SDL'e alternatif olarak Allegro olabilir. Ben bu gün Ubuntu forumlarında gördüm bir arkadaş mantar ezme oyunu (http://forum.ubuntu-tr.net/index.php?topic=35040.0) yazmış :-p

http://1.bp.blogspot.com/-WpOePNCcT54/UBAzK6O5i3I/AAAAAAAAA5U/YuyQLrFvEYY/s1600/allegro+final+fight.PNG

Hiç denemedim ama D ilintileri de varmış.

https://github.com/SiegeLord/DAllegro5

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

August 03, 2012

Cevaplar için teşekkür ederim Erdem...

Ben henüz bunları okumamışken cizici.d sınıfını kullanarak bir hedefTahtası yapmayı başarmış bulunmaktayım...holeyyy...:)

void main() {
   SDL_Init(SDL_INIT_EVERYTHING);
   EkranYüzeyi hedefTahtası = SDL_SetVideoMode(400, 400, 0, SDL_HWSURFACE);

   with(new Çizici(hedefTahtası)) {
     foreach(i; 0..120) {  // iç içe daireler
         if(i % 20 == 0 || i % 12 == 0) {
           çiz(200, 200, 100 - i);
         }
     }
     çiz(100, 200, 300, 200); // yatay çizgi
     çiz(200, 100, 200, 300); // dikey çizgi
   }
   hedefTahtası.EkranaBas();
   birazBekle(2000);
}

http://img84.imageshack.us/img84/1457/hedef.png
Alıntı ("erdem"):

>

Bir de bahsettiğin gibi sadece sdl ve ana program olacak şekilde tamamen oyunu kendin oluşturabilirsin. Bu durumda tek gereken şey C ilintilerinin olduğu sdl.d kaynak dosyası. Bu arada Makefile dosyalarını incelersen aslında farklı örneklerin de olduğunu görebilirsin.

Açıkçası senin meydana getirdiğin emeklerini de kullanmak isterim. Yukarıdaki ilk basit denememi senin hazırladığın sınıf olmasaydı sanırım halan daireyi çizmeye çalışıyor olurdum.

Alıntı ("erdem"):

>

Maalesef artık ilgimi kaybettiğim için devam edemiyorum :rolleyes: Ama istersen programcı olarak seni ekleyebilirim istediğin gibi kaynak kodu değiştirebilirsin.

Katkı sağlamak isterim ama önce sınıfları ve amaçlarını öğrenmeliyim. İlk olarak cizici.d ile başladım ama vektor2.d'yi henüz anlamadığım için onu devre dışı bıraktım. Bir de çizgi çizen algoritmada şöyle küçük bir değişiklik (sadece if ve for uçtu, yerine do while geldi) yapmak hoşuma gitti:

       int dx =  abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
       int dy = -abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
       int err = dx + dy, e2;

       do {
           if (e2 >= dy) { err += dy; x0 += sx; }
           if (e2 <= dx) { err += dx; y0 += sy; }
           çiz(x0, y0, renk);
           e2 = 2 * err;
       } while (x0 != x1 && y0 != y1);

Belki çember çizen döngüye de küçük bir rötuş gerekebilir. Yukarıda paylaştığım resme bakarsanız çizgilerin kesiştiği noktayı 1px ile kaçırıyor. Tabi benim hatam da olabilir. Bir şeyleri karıştırmışımdır kesin... :-p
Alıntı ("erdem"):

>

Alıntı ("erdem"):

>

Aslında belki bu kadar basit bir program için yazmak gerekmeyebilir. Ama evet ;-) Çünkü örneğin orada oyun nesnesinin oyun ekranının dışından taşmaması için burada da anlattığım gibi bir yöneyi bir eksen etrafında yansıtmak gerekiyor. Benim yazdığım örnekte çok temel yöney işlemleri var.

https://github.com/erdemoncel/oyun/blob/master/src/vector2.d

Demek bu yapı ekran dışına taşmalar ile ilgileniyor? Benim de dikkatimi çekti. Ekran dışına taşan bir şey aksi yöne yansıyor!

Sevgiler, saygılar...

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

August 03, 2012

Alıntı (Salih Dinçer):

>

Ben henüz bunları okumamışken cizici.d sınıfını kullanarak bir hedefTahtası yapmayı başarmış bulunmaktayım...holeyyy...:)

Hoş olmuş gerçekten de!

Alıntı:

>

Belki çember çizen döngüye de küçük bir rötuş gerekebilir. Yukarıda paylaştığım resme bakarsanız çizgilerin kesiştiği noktayı 1px ile kaçırıyor. Tabi benim hatam da olabilir. Bir şeyleri karıştırmışımdır kesin... :-p

Çember çizme algoritmasında, ya da kodlarken bir hata olabilir. Çünkü onları eklerken biraz acele etmiştim.

Github kullanıcı adını verirsen hemen seni projeye ekleyebilirim. Kaynak kod üzerinde istediğin gibi değişiklik yapabilirsin ;-)
Hatta senin yazdığın kodu inceledikten sonra 'oyun' ve 'oyuncu.d' dosyalarına aslında gerek olmadığını düşünmeye başladım. Kütüphane temel seviyede çizim işlemleri, resim yükleme, animasyon vs.. sağlamalı. Sonra kullanıcı kaynak kodu sınıfları oyun nesnelerini oluştururken esnek olarak hareket edebilmeli.

Alıntı:

>

https://github.com/erdemoncel/oyun/blob/master/src/vector2.d

Demek bu yapı ekran dışına taşmalar ile ilgileniyor? Benim de dikkatimi çekti. Ekran dışına taşan bir şey aksi yöne yansıyor!

Yaptığımız işlem hız yöneyini x ya da y ekseninde yansıtmak. Aynı kütük içindeki birim testlerinde de görebilirsin. Bu arada SDL'in koordinat ekseni x sağa ve y aşağı bakacak şekilde.

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

August 03, 2012

Alıntı (erdem):

>

Alıntı (Salih Dinçer):

>

Belki çember çizen döngüye de küçük bir rötuş gerekebilir. Yukarıda paylaştığım resme bakarsanız çizgilerin kesiştiği noktayı 1px ile kaçırıyor. Tabi benim hatam da olabilir. Bir şeyleri karıştırmışımdır kesin... :-p

Çember çizme algoritmasında, ya da kodlarken bir hata olabilir. Çünkü onları eklerken biraz acele etmiştim.

Yok, yok! Asıl sorun test yapmadan alternatif koddan bahsetmede acele etmem...:)

Çünkü döngüyü bitiren koşulu, hangi akla hizmet yukarıdaki gibi yapmışım bilemiyorum. Tabi onu değiştirince bir satırı da yukarı kaydırmak gerekti. Şimdi birebir aynı şekilde çalışıyor...

       çiz(x0, y0, renk);  // Bu satır olmayınca ilk nokta basılmıyor!
       do {
           e2 = 2 * err;
           if (e2 >= dy) { err += dy; x0 += sx; }
           if (e2 <= dx) { err += dx; y0 += sy; }
           çiz(x0, y0, renk);
       } while (!(x0 == x1 && y0 == y1));

Emin olmak için üst üstte iki rengi, farklı şekil (hem beyaz üstüne kırmızı, hem de kırmızı üzerine beyaz) ve koordinatlarda çizgi çizen eski ile yeni kodu karşılaştırdım. İstersen kullanabiliriz çünkü çember çizen işlevde de do while kullanılmış. Bunda da olunca hoş bir uyum oluyor. Tabi dışındaki fazladan satır olmasaydı güzel olurdu hani!

Alıntı (erdem):

>

Github kullanıcı adını verirsen hemen seni projeye ekleyebilirim. Kaynak kod üzerinde istediğin gibi değişiklik yapabilirsin ;-)

Ben şu ana kadar bir GitHub hesabı açmamıştım. Sayende bunu da almış oldum...:)
Kullanıcı adım: salihdb

Alıntı (erdem):

>

Yaptığımız işlem hız yöneyini x ya da y ekseninde yansıtmak. Aynı kütük içindeki birim testlerinde de görebilirsin. Bu arada SDL'in koordinat ekseni x sağa ve y aşağı bakacak şekilde.

Yöney, tam olarak vector'ün Türkçesi mi demek?

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

August 03, 2012

Alıntı (Salih Dinçer):

>

Ben şu ana kadar bir GitHub hesabı açmamıştım. Sayende bunu da almış oldum...:)
Kullanıcı adım: salihdb

Tamam ekledim bile! :-) Çember çizme kodunu da istediğin gibi değiştirebilirsin.

Alıntı:

>

Yöney, tam olarak vector'ün Türkçesi mi demek?

Evet. Vektör olarak da kullanılıyor aslında.

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

August 03, 2012

Bir de çok ilginç bir şey buldum. Burada bir C kodu çember çiziyor. Ama ben ilk planda bir grafik kütüphanesi kullanmadan nasıl çizdiğini anlamamıştım.

https://banu.com/blog/7/drawing-circles/

Ama sonra farkettim ki bunu kullandığı resim biçemi olan Netpbm sayesinde yapabiliyor.

http://en.wikipedia.org/wiki/Netpbm_format

'P1

This is an example bitmap of the letter "J"

6 10
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0'

Örneğin bu 0 ve 1'leri bir metin dosyasına kaydettiğimizde J harfine dönüşüyor. Çok ilginç gerçekten de sonra Emacs'la da görüntülenebiliyor.

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

August 04, 2012

Hah, ben de yazı olayını soracaktım!

SDL'nin bir font veritabanı var mı? Yani ek bir şeye ihtiyaç duymadan ekrana yazı yazabiliyor muyuz? Aslında oyun yazarların bahsettiğin gibi kendine özgü yazıları oluyor. Hatta ActionScript3 ile yazılan oyunlarda bile kayıt edilmiş PNG görüntüleri kullanıldığını hatırlıyorum. Resmi haritalayarak ekrana yazı ve bilimum simge yazıyorlardı...:)

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

« First   ‹ Prev
1 2 3