2. Kimdir?
Şeref AKYÜZ
2010 - www.serefakyuz.com
2011 – Odtü Teknokent
Andengine ile tanışma
Android tabanlı oyunlar
2012 – Android Oyun Programlama Kitabı
2012 – Fatih Projesi
Eğitim içerikli oyunlar.
2013 – Son finallerine giriyor.
2
3. Sunum Planı
Andengine(Gles1)
Temel Kavramlar
Resim Görüntüleme ve Animasyon Oluşturma
Dokunmatik Ekran Kullanımı ve Multitouch
Update Sistemi
Sensör Kullanımı
Parçacık Sistemleri
Fizik kullanımı(Box2D)
3
4. Neden Oyun Motoru?
Amaç: Daha kısa zamanda daha kaliteli oyunlar
geliştirmek
Daha düzenli kod.
Hazır altyapı sayesinde kodlama
aşamasında direkt oyun içeriğine odaklanma.
Daha hızlı oyun geliştirme.
4
5. Andengine
Nicolas Gramlich
2d, açık kaynak kodlu oyun motoru. (Framework)
Görsel ara yüz yok.
Oyun yazmak için orta derecede java bilgisi yeterli.
Kurulum;
Bir jar dosyasının Java projesine eklenmesi.
5
6. Andengine
BaseGameActivity Sınıfı
4 metot:
onLoadEngine (): Engine
Motor ayarlarının yapıldığı metot.
onLoadResources(): Void
Resim, ses gibi dosyaların çağırılması ve hafızaya yüklenmesi.
onLoadScene(): Scene
Oyunun asıl yönetildiği kısım
onLoadComplete(): Void
Dosyalar hafızaya yüklenir, resimler sahnelere çizdirilir,
onLoadComplete metodu çalışır.
6
7. Temel Kavramlar(Nesneler)
Engine
Motor ayarları
Kamera oluşturulması
engine = new Engine(options);
options;
Tam Ekran – Yarım Ekran
Ekran Yönü (Yatay-Dikey)
Çözünürlük Yöntemi(Ekranı doldur, Boyutları sabit
tut)
7
8. Temel Kavramlar(Nesneler)
Camera
Engine nesnesi için kurulan(setScene) sahnenin
görüntülenmesi
Ekran boyutunun belirtilmesi(Pixel)
camera = new Camera(START_POSX, START_POSY,
CAMERA_WIDTH, CAMERA_HEIGHT);
8
9. Temel Kavramlar(Nesneler)
Scene
Oyun araçlarının üzerinde bulunduğu nesnedir.
Resimler(Sprite) Scene nesneleri üzerine çizdirilirler.
Dokunma özelliği vardır.
Bir oyunda birden çok Scene nesnesi olabilir. (Menü
sahnesi, oyun sahnesi, durdurma-bitiş sahneleri gibi)
this.sahne = new Scene();
9
11. Resim Görüntüleme: Texture
Texture nesneleri;
Görüntülenecek resmin kalıplarını oluştururlar.
2n değerinde ebatlara sahip olabilirler.(64x64, 32x2,
512x1024)
Bir texture nesnesi, birden çok resim için kullanılabilir.
(Performans açısından önemlidir.)
Resmin boyutlarından büyük olabilir, küçük olamaz.
TextureRegion nesnesi için Texture nesnesi gereklidir.
texSaha = new Texture(textureWidth, textureHeight,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
11
12. Resim Görüntüleme: TextureRegion
TextureRegion nesneleri;
Resim yolu belirtilir.
Parametre olarak Texture nesnesi.
Sprite nesnesi için TextureRegion nesnesi gereklidir.
texRegSaha = TextureRegionFactory.createFromAsset(
texSaha, context, "gfx/Arkaplan.jpg", textPosX,
textPosY);
12
13. Resim Görüntüleme: Sprite
Resmin görüntülenmesi için gerekli nesne.
Sprite Nesnesi, Texture nesnesi içinde belirtilen resim
kalıbını; TextureRegion içinde yolu belirtilen resmi
kullanır.
Sprite ve Scene nesneleri üzerine çizdirilir.
spriteSaha = new Sprite(spritePosX, spritePosY,
texRegSaha);
13
14. Animasyon Oluşturma
Animasyonlar, resimlerden sonra en önemli oyun
dinamiklerinden biridir.
Texture TiledTextureRegion AnimatedSprite
Animasyonu Yönet
14
15. Animasyon Oluşturma: TiledTextureRegion
Animasyon parçaları tek bir resimde toplanır.
TiledTextureRegion, büyük resmi satır ve/veya
sütunlara böler.
tiledTexReg = TextureRegionFactory.createTiledFromAsset(
texAnime, context, "gfx/anime.png", textPosX,
textPosY, columnCount, rowCount);
15
16. Animasyon Oluşturma: AnimatedSprite
Sprite nesnesinin sahip olduğu tüm özellikler.
Animasyon yönetme, kontrol etme.
animate() metodu ile animasyon başlar.
stopAnimation() metodu ile animasyon biter.
animSprite = new AnimatedSprite(
animSpritePosX, animSpritePosY, tiledTexReg);
16
17. Dokunmatik Ekran Kullanımı
Her bir nesnenin dokunma alanı mevcut ama pasif
durumda.
Aktif etme;
Bulunduğu sahne nesnesi üzerinde dokunma alanı
tanımlanır. (registerTouchArea(ITouchArea))
Temelde 3 dokunma evresi;
isActionDown
isActionMove
isActionUp
17
22. Update Sistemi: IUpdateHandler Arayüzü
Engine, Scene gibi oyun boyunca kalıcı olan nesneler
üzerinde oluşturulur.
22
23. Sensör Kullanımı
Oyunun eğlencesini arttırmak amacıyla sensör
dinamikleri kullanılabilir.
IAccelerometerListener arayüzünün sağladığı metot:
AccelerometerData nesnesi sensör bilgilerini içerir.
23
24. Parçacık Sistemleri
Oyunun ana dinamiklerinin dışında, süslemelerde
kullanılır.
Kullanımı;
Küçük boyutlarda tek bir resim
Çeşitlilik nasıl sağlanır?
Parçaların her birinin;
Hareket edecekleri hız ve yön değerleri
Döndürülme miktarı
Boyutu
değiştirilebilir.
24
27. Fizik Kullanımı(Box2D)
Gerçek hayattaki fiziksel kanunlar oyunlara başarılı bir
şekilde uygulanmalı;
Kuvvet
Hız
Kütle
Yer çekimi
Ağırlık
Çarpışmalar
Sürtünme
27
28. Fizik Kullanımı(Box2D)
Bu fiziki olayların kontrolleri Andengine ile uyumlu
olan Box2D kütüphaneleri ile sağlanabilir.
Tıpkı Andengine gibi bir jar dosyası ve projeye dahil
edilmesi aynı aşamaları kapsar.
Andengine uzunluk ölçüsü olarak pixel; Box2d metre
kullanır.
Uzunluk değerlerinde dönüşüm yapılmalı.
28
29. Fiziksel Ortamın Oluşturulması
PhysicsWorld nesnesi;
Fiziksel nesneleri içeren ortamdır.
Bir oyunda birden çok PhysicsWorld olabilir.
FixtureDef nesnesi;
Fiziksel ortamın özelliklerinin belirlendiği nesnedir;
Yoğunluk
Esneklik
Sürtünme
29
30. Andengine Nesnelerinin Fiziksel
Özellik Kazanması
Body nesnesi;
Sprite, AnimatedSprite ve diğer görsel Andengine
nesnelerinin etrafını kapsayarak fiziksel bir şerit
oluşturur.
Body içindeki görseller, body nesnesinden bağımsız
hareket edemez.
Body çeşitleri mevcuttur.
30
31. Body Çeşitleri
Şekline göre;
LineBody
BoxBody
CircleBody
Hareket Durumlarına Göre
StaticBody
DynamicBody
KinematicBody
31