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 !)




Untitled 1 Link Source : DOWNLOAD HERE

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


0 comments:

Post a Comment

http://knlaptrinhandroid.blogspot.com/

 
Top