Hôm nay mình sẽ hướng dẫn các bạn cách tạo ra một list các sprite hay animation trong AndEngine.
Video hướng dẫn : (like và G+ ủng hộ mình nha !)
package com.example.andenginemuntitouch; package com.example.demo_taget; import java.util.LinkedList; import java.util.Random; import org.anddev.andengine.engine.Engine; import org.anddev.andengine.engine.camera.BoundCamera; import org.anddev.andengine.engine.handler.timer.ITimerCallback; import org.anddev.andengine.engine.handler.timer.TimerHandler; 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.modifier.MoveYModifier; import org.anddev.andengine.entity.scene.Scene; import org.anddev.andengine.entity.scene.background.AutoParallaxBackground; import org.anddev.andengine.entity.scene.background.ColorBackground; import org.anddev.andengine.entity.scene.background.ParallaxBackground.ParallaxEntity; import org.anddev.andengine.entity.sprite.AnimatedSprite; import org.anddev.andengine.entity.sprite.Sprite; import org.anddev.andengine.entity.text.ChangeableText; import org.anddev.andengine.entity.util.FPSLogger; import org.anddev.andengine.extension.input.touch.controller.MultiTouch; import org.anddev.andengine.extension.input.touch.controller.MultiTouchController; import org.anddev.andengine.extension.input.touch.exception.MultiTouchException; 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.TextureRegionFactory; import org.anddev.andengine.opengl.texture.region.TiledTextureRegion; import org.anddev.andengine.ui.activity.BaseGameActivity; import android.os.Bundle; import android.app.Activity; import android.util.DisplayMetrics; import android.util.Log; import android.view.Menu; import android.widget.Toast; public class MainActivity extends BaseGameActivity { private static int CAMERA_WIDTH; private static int CAMERA_HEIGHT; private BoundCamera mCamera; private Scene scene; // china ship private Texture mTextureChinaShip; private TiledTextureRegion mTextureRegionChinaShip; private LinkedListtargetLLChinaShip; private LinkedList TargetsToBeAddedChinaShip; @Override public Engine onLoadEngine() { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels; CAMERA_WIDTH = width; CAMERA_HEIGHT = height; Log.v("getWindowManager", "width = " + width + " ,height= " + height); this.mCamera = new BoundCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); // khai báo sử dụng đa điểm trong app final Engine engine = new Engine(new EngineOptions(true, ScreenOrientation.PORTRAIT, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera).setNeedsMusic(true).setNeedsSound(true)); try { if (MultiTouch.isSupported(this)) { engine.setTouchController(new MultiTouchController()); if (MultiTouch.isSupportedDistinct(this)) { Toast.makeText(this, "Cảm ứng đa điểm - các điều khiển hoạt động tốt!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "MultiTouch detected, but your device has problems " + "distinguishing between fingers.\n\nControls are placed at different vertical" + " locations.", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(this, "Sorry your device does NOT support MultiTouch!\n\n(Falling back to SingleTouch.)" + "\n\nControls are placed at different vertical locations.", Toast.LENGTH_LONG).show(); } } catch (final MultiTouchException e) { Toast.makeText(this, "Bản android này không hỗ trợ đa điểm!\n\n(Chỉ sử dụng đơn điểm.)\n\nChỉ sử " + "dụng được một điều khiểu trong một thời điểm.", Toast.LENGTH_LONG).show(); } return engine; } @Override public void onLoadResources() { TextureRegionFactory.setAssetBasePath("gfx/"); // load china ship this.mTextureChinaShip = new Texture(512, 512, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mTextureRegionChinaShip = TextureRegionFactory.createTiledFromAsset(this.mTextureChinaShip, this, "shipchina1.png", 0, 0, 1, 1); this.mEngine.getTextureManager().loadTexture(this.mTextureChinaShip); } @Override public Scene onLoadScene() { this.mEngine.registerUpdateHandler(new FPSLogger()); scene = new Scene(); scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f)); targetLLChinaShip = new LinkedList (); TargetsToBeAddedChinaShip = new LinkedList (); createSpriteSpawnTimeHandlerChinaship(); return scene; } @Override public void onLoadComplete() { // TODO Auto-generated method stub } public void add_Chinaship() { Random rand = new Random(); int minX = 5; int maxX = CAMERA_WIDTH - mTextureRegionChinaShip.getWidth(); int rangeX = maxX - minX; int x = rand.nextInt(rangeX) + minX; int y = CAMERA_HEIGHT / 8; // -mTextureRegionChinaShip.getHeight(); AnimatedSprite target = new AnimatedSprite(x, y, this.mTextureRegionChinaShip); target.animate(new long[] { 200, 200, 200 }, 0, 2, true); scene.attachChild(target); target.setScale(1f); int minDuration = 3;// tốc độ con vật bay chậm nhất int maxDuration = 5;// tốc độ con vật bay nhanh nhất int rangeDuration = maxDuration - minDuration; int actualDuration = rand.nextInt(rangeDuration) + minDuration; MoveYModifier mod = new MoveYModifier(actualDuration, target.getY(), CAMERA_HEIGHT); target.registerEntityModifier(mod); TargetsToBeAddedChinaShip.add(target); } private void createSpriteSpawnTimeHandlerChinaship() { TimerHandler spriteTimerHandler; float mEffectSpawnDelay = 2f; spriteTimerHandler = new TimerHandler(mEffectSpawnDelay, true, new ITimerCallback() { @Override public void onTimePassed(TimerHandler pTimerHandler) { add_Chinaship(); } }); getEngine().registerUpdateHandler(spriteTimerHandler); } }
0 comments:
Post a Comment
http://knlaptrinhandroid.blogspot.com/