Bài 4: Vẽ 1 sprite và di chuyển sprite - Game with Andengine

Thảo luận trong 'Điện thoại, viễn thông' bắt đầu bởi khaipt, 2/9/12.

  1. khaipt New Member

    khaipt

    Tham gia ngày:
    30/6/12
    Bài viết:
    22
    Đã được thích:
    34
    Điểm thành tích:
    0
    Bài 4: Vẽ 1 sprite và di chuyển sprite

    Chào các bạn. Hôm này mình sẽ hướng dẫn các bạn cách dùng 1 sprite trong Andengine. Các bạn xem code sau đây.​

    Click vào đây để download toàn bộ source code bài 4.​

    PHP Code:​
    PHP:
    package TestAndengine.Gioi;
     
    import org.anddev.andengine.engine.Engine;
    import org.anddev.andengine.engine.camera.Camera;
    import org.anddev.andengine.engine.handler.IUpdateHandler;
    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.opengl.texture.TextureOptions;
    import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
    import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
    import org.anddev.andengine.opengl.texture.region.TextureRegion;
    import org.anddev.andengine.ui.activity.BaseGameActivity;
     
    import android.os.Bundle;
     
    public class 
    TestAndengineActivity extends BaseGameActivity {
    //Khai báo thêm 2 biến quan trọng
    private Camera MyCamera;//Biến này thường để cấu hình màn hình
    private Scene MyScene;//Quản lý những gì bạn vẽ.
     
    private int WIDTH 320;//Chiều rộng vùng hiện thị
    private int HEIGHT 480;//Chiều cao vùng hiện thị
     
     
    private BitmapTextureAtlas bitmapTextureAtlas;//Lưu ảnh trong bộ nhớ
    private TextureRegion textureRegion;//Lưu khi load ảnh
    private Sprite sprite;//Sprite quả bóng
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    }
     
    @
    Override
    public Engine onLoadEngine() {
    //Khởi tạo vùng hiện thị là 320*480
    this.MyCamera = new Camera(00WIDTHHEIGHT);
    //Yêu cầu màn hình hiện thị nằm ngang thì ScreenOrientation.LANDSCAPE
    Engine engine = new Engine(new EngineOptions(trueScreenOrientation.PORTRAIT,
    new 
    RatioResolutionPolicy(WIDTHHEIGHT),
    this.MyCamera));
    return 
    engine;
    }
     
    @
    Override
    public void onLoadResources() {
    //Khai báo vùng lưu trữ ảnh có kích thước 256,256. Đây là cái khó nhất đó. Sẽ giải thích sau.
    this.bitmapTextureAtlas = new BitmapTextureAtlas(256256TextureOptions.BILINEAR_PREMULTIPLYALPHA);
    //Load ảnh
    this.textureRegion BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.bitmapTextureAtlasthis"ball.png"00);
    mEngine.getTextureManager().loadTextures(this.bitmapTextureAtlas);
    }
     
    @
    Override
    public Scene onLoadScene() {
    this.mEngine.registerUpdateHandler(new FPSLogger());
     
    MyScene = new Scene();
    MyScene.setBackground(new ColorBackground(0.09804f0.6274f0.8784f));//Đặt màu nền
     
    //Đặt sprite tại vị trí x = 100,y = 100
    this.sprite = new Sprite(100100this.textureRegion);
    MyScene.attachChild(sprite);//Add vào MyScene
     
    //Cập nhật (coi như vòn lặp hoạt cảnh)
    MyScene.registerUpdateHandler(new IUpdateHandler() {
    @
    Override
    public void reset() {
    // TODO Auto-generated method stub
    }
     
    boolean chuyen false;
    //Muốn cập nhật cái gì thì cho vào đây
    @Override
    public void onUpdate(float pSecondsElapsed) {
    try {
    //Tạm dừng cập nhật trong 10 ms
    Thread.sleep(10);
    } catch (
    InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //Di chuyển sang phải
    if(!chuyen){
    sprite.setPosition(sprite.getX()+5100);
    if(
    sprite.getX() > 200)//Vượt quá giới hạn thì cho di chuyển ngược lại
    chuyen true;
    }else{
    sprite.setPosition(sprite.getX()-5100);
    if(
    sprite.getX() < 10)
    chuyen false;
    }
    }
    });
     
    return 
    MyScene;
    }
     
    @
    Override
    public void onLoadComplete() {
    // TODO Auto-generated method stub
     
    }
    }

    Trong code có comment rồi. Có 1 cái quan trọng trong bài này mai mình sẽ giải thích. Các bạn cứ test xem nó có chạy không nhé.​

    Hi. Bài viết có ích cho các bạn thì các bạn thanks nhé. Cảm ơn các bạn.​
    Tác giả: vangioicnt nguồn: vietandroid​

     
    6 people like this.
    Đang tải...
  2. bacbim New Member

    bacbim

    Tham gia ngày:
    18/12/12
    Bài viết:
    45
    Đã được thích:
    4
    Điểm thành tích:
    0
    Giới tính:
    Nam
    Bài viết rất hay cảm ơn bạn rất nhiều!
     

Chia sẻ trang này