Bài hôm nay mình hướng dẫn các bạn di chuyên nhân nhân vật bằng ảnh sprite 3x4 với 12 khung hình thể hiện trạng thái di chuyển của nhân vật.
Khác với bài trước là di chuyển và tạo cảm giác di chuyển 4 hướng bằng cách rotation sprite thì trong bài này bạn chỉ cần animate ảnh là được , và bạn có thể đặt trạng thái nhân vật khi dừng theo ý muốn :
ảnh 3x4
Video hướng dẫn : (like và G+ ủng hộ mình nha !)
package pham.tien.phong.example.controllinandengine;
import javax.microedition.khronos.opengles.GL10;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.camera.hud.controls.AnalogOnScreenControl;
import org.anddev.andengine.engine.camera.hud.controls.BaseOnScreenControl;
import org.anddev.andengine.engine.camera.hud.controls.DigitalOnScreenControl;
import org.anddev.andengine.engine.camera.hud.controls.AnalogOnScreenControl.IAnalogOnScreenControlListener;
import org.anddev.andengine.engine.camera.hud.controls.BaseOnScreenControl.IOnScreenControlListener;
import org.anddev.andengine.engine.handler.physics.PhysicsHandler;
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.layer.tiled.tmx.TMXProperties;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXProperty;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXTile;
import org.anddev.andengine.entity.layer.tiled.tmx.TMXTileProperty;
import org.anddev.andengine.entity.modifier.ScaleModifier;
import org.anddev.andengine.entity.modifier.SequenceEntityModifier;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.background.ColorBackground;
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.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;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends BaseGameActivity{
private static final int CAMERA_WIDTH = 480;
private static final int CAMERA_HEIGHT = 800;
private Camera mCamera;
private Texture texture;
private TiledTextureRegion textureRegion;
private int statusCar =0;// 0 là không chuyển đông; 1 là chuyển động
private Texture mOnScreenControlTexture;
private TextureRegion mOnScreenControlBaseTextureRegion;
private TextureRegion mOnScreenControlKnobTextureRegion;
@Override
public Engine onLoadEngine() {
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new Engine(new EngineOptions(true, ScreenOrientation.PORTRAIT,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
}
@Override
public void onLoadResources() {
TextureRegionFactory.setAssetBasePath("gfx/");
this.texture = new Texture(128, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.textureRegion = TextureRegionFactory.createTiledFromAsset(this.texture, this, "hoangtu.png",0, 0,3,4);
this.mEngine.getTextureManager().loadTexture(this.texture);
this.mOnScreenControlTexture = new Texture(256, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mOnScreenControlBaseTextureRegion = TextureRegionFactory.createFromAsset(
this.mOnScreenControlTexture, this, "onscreen_control_base.png", 0, 0);
this.mOnScreenControlKnobTextureRegion = TextureRegionFactory.createFromAsset(
this.mOnScreenControlTexture, this, "onscreen_control_knob.png", 128, 0);
this.mEngine.getTextureManager().loadTextures(this.texture, this.mOnScreenControlTexture);
}
@Override
public Scene onLoadScene() {
this.mEngine.registerUpdateHandler(new FPSLogger());
final Scene scene = new Scene();
scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
// load ảnh lên màn hình game
final AnimatedSprite car = new AnimatedSprite(CAMERA_WIDTH/2, CAMERA_WIDTH/2, this.textureRegion);
final PhysicsHandler physicsHandler = new PhysicsHandler(car);
car.setScale(2);
car.registerUpdateHandler(physicsHandler);
scene.attachChild(car);
final DigitalOnScreenControl digitalOnScreenControl = new DigitalOnScreenControl
(0, CAMERA_HEIGHT - this.mOnScreenControlBaseTextureRegion.getHeight(),
this.mCamera, this.mOnScreenControlBaseTextureRegion,
this.mOnScreenControlKnobTextureRegion, 0.1f, new IOnScreenControlListener() {
@Override
public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
Log.v("pValueX= "+pValueX, "pValueY= "+pValueY);
if(pValueX != 0 || pValueY != 0){
if(pValueX > 0){
//vật di chuyển sang phải
car.animate(new long[]{ 200, 200, 200}, 6, 8, true);
statusCar=1;
}else if(pValueX < 0){
// vật di chuyển sang bên trái
car.animate(new long[]{ 200, 200, 200}, 3, 5, true);
statusCar =2;
}else if(pValueY > 0){
// vật di chuyển xuống dưới
car.animate(new long[]{ 200, 200, 200}, 0, 2, true);
statusCar =3;
}else if(pValueY < 0){
// di chuyển lên trên màn hình
car.animate(new long[]{200, 200, 200}, 9, 11, true);
statusCar =4;
}
physicsHandler.setVelocity(pValueX * 100, pValueY * 100);
}else{// khi mà nhả bấm coltroll
if(statusCar ==1)
{
car.animate(new long[]{200}, new int[]{6}, 10000);
}
if(statusCar ==2)
{
car.animate(new long[]{200}, new int[]{3}, 10000);
}
if(statusCar ==3)
{
car.animate(new long[]{200}, new int[]{0}, 10000);
}
if(statusCar ==4)
{
car.animate(new long[]{200}, new int[]{9}, 10000);
}
statusCar = 0;
physicsHandler.setVelocity(pValueX * 0, pValueY * 0);
}
}
});
digitalOnScreenControl.getControlBase().setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
digitalOnScreenControl.getControlBase().setAlpha(0.5f);
digitalOnScreenControl.getControlBase().setScaleCenter(0, 128);
digitalOnScreenControl.getControlBase().setScale(1.25f);
digitalOnScreenControl.getControlKnob().setScale(1.25f);
digitalOnScreenControl.refreshControlKnobPosition();
scene.setChildScene(digitalOnScreenControl);
return scene;
}
@Override
public void onLoadComplete() {
// TODO Auto-generated method stub
}
}
Mọi thắc mắc xin gửi về gmail : svk10acntt@gmail.com
0 comments:
Post a Comment
http://knlaptrinhandroid.blogspot.com/