Android Oyun Programlama Ders 2: Resimleri(Sprite) Sürükleme

Android ile oyun geliştirme derslerinin ikincisinde bir sprite’ı(resmi) sürükleme kodunu anlatacağım. Birinci dersteki örnek üzerinden gitmek sizler için de kodu daha anlaşılır kılacaktır. Yapılacak işlem önceden eklediğimiz iki resimden birini hareket ettirmek olacak. Dokunduğumuz yere resmin gelmesini ve ekrana dokunup sürüklediğimizde parmağımızı takip etmesini sağlayacağız.

Oluşturulan scene nesnesinin onSceneTouchListener fonksiyonu içinde ekrana dokunma kontrolünü oluşturuyoruz. isActionDown touchEvent’ ı ile ekrana dokunulduğunda çalıştırılacak kod bloğunu if içinde yazıyoruz. isActionMove touchEvent’ ı ile de ekran yüzeyinde parmağın hareketi esnasında çalıştırılacak kod bloğunu, yine if içinde belirtiyoruz. Zaten iki satır da aynı işlemi yapıyor. Yani resmin parmağı takip etmesini sağlıyor.

Kod kısmı incelendiğinde konu daha iyi anlaşılacaktır. Aşağıdan kod bloğunu 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.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.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;
TextureRegion textRegResim1, textRegResim2;
Sprite spriteResim1, spriteResim2;

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()
{
textureResim1=new Texture(128,128,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureResim2=new Texture(128,128,TextureOptions.BILINEAR_PREMULTIPLYALPHA);

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);
}

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

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

this.scene.setOnSceneTouchListener(new IOnSceneTouchListener()
{
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent)
{
if (pSceneTouchEvent.isActionDown())
{
spriteResim1.setPosition(pSceneTouchEvent.getX() – textureResim1.getWidth()/2,
pSceneTouchEvent.getY() – textureResim1.getHeight()/2);
}
if (pSceneTouchEvent.isActionMove())
{
spriteResim1.setPosition(pSceneTouchEvent.getX() – textureResim1.getWidth()/2,
pSceneTouchEvent.getY() – textureResim1.getHeight()/2);
}
return false;
}
});

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

return this.scene;
}

public void onLoadComplete() {

}

}
[/cc]

Dersin birinci kısmında, oluşturulan nesnelerin ayrıntılı özelliklerini ve oluşturulma aşamalarının anlatımlarını bulabilirsiniz.

Bir cevap yazın

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