Thứ Năm, 24 tháng 4, 2014

Andengine - Bài 13 lập trình game andengine cơ bản - DigitalOnScreenCont...

    Chào các bạn đã đến với blog knlaptrinhandroid

    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 :

 photo hoangtu_zps8eefcaa6.png

 ảnh 3x4


  Video hướng dẫn : (like và G+ ủng hộ mình nha !)




Full demo và ảnh : TẠI ĐÂY

Code

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


◄ Back Next ►
 

Copyright 2014 Blog Tự Học Android - All Right Reserved Design by Garatemplate Published By Goo Quynh