Android Oyun Programlama Ders 4: AnimatedSprite İle Animasyon Oluşturma

Android andengine ile oyun geliştirme derslerinin dördüncüsünde AnimatedSprite kavramına ve nasıl oluşturulduğuna bir örnek uygulama eşliğinde değineceğim. Daha önceki derslerde değindiğim sprite kavramından oluşturulma aşamsında pek farkı bulunmayan bir kavram aslında animatedSprite.

Birinci derste değindiğim sprite mantığında çalışır. Tek farkı, tek resimde birleştirilmiş resimlerin sırasıyla gösterilerek bir animasyon havası verilmesidir. Bir diğer önemli nokta ise sprite ile birlikte kullanılan textureRegion yerine TiledTextureRegion kullanılmasıdır.

Biraz daha derinlemesine incelersek;

[cc lang=’java’]
tiledTextRegAnime = TextureRegionFactory.createTiledFromAsset(textureAnime, this, “gfx/face_box_tiled.png”, 0, 0, 2, 1);
[/cc]
ifadesindeki ögelerden son ikisi, resmin içindeki küçük resimlerin satır ve sütun sayılarını ifade eder. Bizim kullandığımız resim iki sütun ve bir satırdan oluşuyor.

[cc lang=’java’]
animSpriteAnime.animate(100);
[/cc]
ifadesi ise, animate fonksiyonunun 100 milisaniyede bir küçük resim parçası(frame) değiştirmesini sağlıyor. Bu sayede de resim, animasyon görüntüsü kazanıyor.

Bu uygulamada kullanılan resimlere birinci dersteki uygulamanın kaynak kodlarını indirerek ulaşabilirsiniz.

Örnek uygulamayı aşağıdan inceleyebilirsiniz.

[cc lang=’java’]
package www.serefakyuz.com;

import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;
import org.anddev.andengine.ui.activity.BaseGameActivity;

public class comSpriteOlusturmaActivity extends BaseGameActivity
{
private static final int CAMERA_WIDTH = 800;
private static final int CAMERA_HEIGHT = 480;
private Camera camera;
Texture textureResim1, textureResim2, textureAnime;
TextureRegion textRegResim1, textRegResim2;
TiledTextureRegion tiledTextRegAnime;
Sprite spriteResim1, spriteResim2;
AnimatedSprite animSpriteAnime;

public Engine onLoadEngine()
{
camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
final EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
engineOptions.getTouchOptions().setRunOnUpdateThread(true);
Engine engine = new Engine(engineOptions);

return engine;
}

public void onLoadResources()
{
textureAnime = new Texture(64,32,TextureOptions.BILINEAR_PREMULTIPLYALPHA);

textureResim1=new Texture(128,128,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureResim2=new Texture(128,128,TextureOptions.BILINEAR_PREMULTIPLYALPHA);

tiledTextRegAnime = TextureRegionFactory.createTiledFromAsset(textureAnime, this, “gfx/face_box_tiled.png”, 0, 0, 2, 1);

textRegResim1 = TextureRegionFactory.createFromAsset(textureResim1, this, “gfx/blueSmileIcon.png”, 0, 0);
textRegResim2 = TextureRegionFactory.createFromAsset(textureResim2, this, “gfx/yellowSmileIcon.png”, 0, 0);

mEngine.getTextureManager().loadTextures(textureResim1, textureResim2, textureAnime);
}

Scene scene;
public Scene onLoadScene()
{
this.mEngine.registerUpdateHandler(new FPSLogger());
this.scene = new Scene();

animSpriteAnime = new AnimatedSprite(300, 300, this.tiledTextRegAnime);

spriteResim1 = new Sprite(200, 100, textRegResim1);
spriteResim2 = new Sprite(400, 100, textRegResim2);

animSpriteAnime.animate(100);

this.scene.attachChild(animSpriteAnime);
this.scene.attachChild(spriteResim1);
this.scene.attachChild(spriteResim2);

return this.scene;
}

public void onLoadComplete() {

}

}
[/cc]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir