Android Oyun Programlama Ders9: Sprite Sürükleme Uygulaması (2)

Android oyun geliştirme derslerinin dokuzuncusunda bir sprite sürükleme uygulaması daha yayınlıyorum takipçilerimden birinin karşılaştığı bir problem üzerine. Öncelikle diğer uygulamada yaptıklarımı ve bu uygulamada nasıl bir yapı kullanacağımı anlatmak istiyorum.
Aslına bakılırsa ilk uygulama da aynı işi yapıyor. Fakat buradan ulaşacağınız diğer uygulamada, sahnenin onSceneTouchEvent metodunu kullandık ki bu metod ekranın her yerinde geçerli olacağından global bir kullanım alanı sunuyor bize. Bu yapıda karşılaşacağımız sorunlardan bir tanesi, sahnede(Scene) kontrol edilmesi ve bir şekilde hareket etmesi gereken ikiden çok nesne varsa, her birinin kontrolünün ayrı ayrı bu yapıda sağlanması çok zor olacaktır. İşte bu makalemin konusu bu problemi çözmeye yöneliktir.
Kodlama kısmına geçmeden önce nesnelerin her birini ayrı ayrı kontrol etmeyi amaçlayan uygulamanın gerçekleştirilmesi sırasında nasıl bir yol izlenmesi gerektiğine kısaca değineyim. Yukarda bahsettiğim sahne nesnesi için yazılmış olan onSceneTouchEvent metoduna eşdeğer onAreaTouched metodunu her bir sprite’ a ayrı ayrı yazmak sorunu çözecektir. Uygulamaya göz attığınızda daha iyi anlayacaksınız, buyrun:
[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.background.ColorBackground;
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 NesneSuruklemeActivity extends BaseGameActivity
{
private static final int CAMERA_WIDTH = 800;
private static final int CAMERA_HEIGHT = 480;

Texture textureResim1, textureResim2;
TextureRegion textRegResim1, textRegResim2;
Sprite spriteResim1, spriteResim2;

private Scene mScene;

public Engine onLoadEngine()
{
final Camera 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);
return new Engine(engineOptions);
}

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

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

this.mScene = new Scene();
this.mScene.setBackground(new ColorBackground(0, 0, 0));

spriteResim1 = new Sprite(100, 300, textRegResim1)
{
// onAreaTouched metodunu spriteResim1 sprite’ı için yazdım
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY)
{
if(pSceneTouchEvent.isActionMove())
{
spriteResim1.setPosition(pSceneTouchEvent.getX() – textRegResim1.getWidth()/2, pSceneTouchEvent.getY() – textRegResim1.getHeight()/2);
}

return true;
}
};

spriteResim2 = new Sprite(100, 100, textRegResim2)
{
// onAreaTouched metodunu spriteResim2 sprite’ı için yazdım
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY)
{
if(pSceneTouchEvent.isActionMove())
{
spriteResim2.setPosition(pSceneTouchEvent.getX() – textRegResim2.getWidth()/2, pSceneTouchEvent.getY() – textRegResim2.getHeight()/2);
}
return true;
}
};

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

this.mScene.registerTouchArea(spriteResim1);
this.mScene.registerTouchArea(spriteResim2);

return this.mScene;
}

public void onLoadComplete() {

}
}
[/cc]

Android Oyun Geliştirme Ders 9 : Sprite Sürükleme Uygulaması
Sahneye(Scene) çizdirilen nesnelerin her birinin ayrı ayrı hareket ve kontrolünü sağlayan yapının örnek uygulaması ve açıklamaları
Anahtar kelimeler:
Android Oyun geliştirme, android nesne hareketi, nesnelerin kontrolü, android touchevent

Bir cevap yazın

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