Thứ tư, ngày 20 tháng 9 năm 2017

Bài 9: Sử dụng DigitalOnScreenControl để điều khiển nhân vật

Ngày đăng: 4/10/2012, 11:17:56PM | Lượt xem: 3,795
Hot!

 Có nhiều cách để điều khiển nhân vật trong game. Andengine cung cấp cho ta đối tượng DigitalOnScreenControl để hiện thị 1 vùng điều khiển, với vùng điều khiển này người chơi có thể điều khiển nhân vật theo hướng đi mà mình mong muốn

 Tham khảo code sau:

package TestAndengine.Gioi; 
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.BaseOnScreenControl; 
import org.anddev.andengine.engine.camera.hud.controls.BaseOnScreenControl.IOnScreenControlListener; 
import org.anddev.andengine.engine.camera.hud.controls.DigitalOnScreenControl; 
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.SpriteBackground; 
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 = 480;//Chiều rộng vùng hiện thị  
    private int HEIGHT = 320;//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  
     
    private BitmapTextureAtlas bg_bitmapTextureAtlas;//Lưu ảnh trong bộ nhớ  
    private TextureRegion bg_textureRegion;//Lưu khi load ảnh  
    private Sprite bg_sprite;//Sprite tạo cảnh nền 
     
    //Khai báo các biến dùng cho vùng điều khiển 
    private DigitalOnScreenControl mDigitalOnScreenControl; 
    private BitmapTextureAtlas mOnScreenControlTexture; 
    private TextureRegion mOnScreenControlBaseTextureRegion; 
    private TextureRegion mOnScreenControlKnobTextureRegion; 
      
    /** 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(0, 0, WIDTH, HEIGHT);  
        //Yêu cầu màn hình hiện thị nằm ngang thì ScreenOrientation.LANDSCAPE  
        Engine engine =     new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE,  
                    new RatioResolutionPolicy(WIDTH, HEIGHT),  
                    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(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA);  
        //Load ảnh  
        this.textureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.bitmapTextureAtlas, this, "ball.png", 0, 0);
        mEngine.getTextureManager().loadTextures(this.bitmapTextureAtlas);  
         

        this.bg_bitmapTextureAtlas = new BitmapTextureAtlas(512, 512, TextureOptions.BILINEAR_PREMULTIPLYALPHA);  
        this.bg_textureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.bg_bitmapTextureAtlas, this, "bg_image.png", 0, 0);
        mEngine.getTextureManager().loadTextures(this.bg_bitmapTextureAtlas);  
         
         
        //Load phần điều khiển 
        this.mOnScreenControlTexture = new BitmapTextureAtlas(256, 256, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 
        this.mOnScreenControlBaseTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "ControlBase.png", 0, 0);
        this.mOnScreenControlKnobTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "ControlKnob.png", 128, 0);
        this.mEngine.getTextureManager().loadTextures(this.mOnScreenControlTexture); 
    }  

    @Override  
    public Scene onLoadScene() {  
        this.mEngine.registerUpdateHandler(new FPSLogger());  

        MyScene = new Scene();  
        this.bg_sprite = new Sprite(0, 0, this.bg_textureRegion);  
        MyScene.setBackground(new SpriteBackground(this.bg_sprite));  
         
        //Đặt sprite1 tại vị trí x = 100,y = 100  
        this.sprite = new Sprite(100, 100, this.textureRegion);  
        MyScene.attachChild(sprite);//Add vào MyScene  
         
        //=======================================ĐIỂM QUAN TRỌNG NHẤT================ 
        //Khai báo và sử lý điều kiện khi ta chạm vào vùng điều khiển 
        mDigitalOnScreenControl = new DigitalOnScreenControl(0, HEIGHT - this.mOnScreenControlBaseTextureRegion.getHeight(),  
                this.MyCamera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f,  
                new IOnScreenControlListener() { 
             public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
                 // vùng điều khiển thay đổi ta sẽ cho sprite di chuyển theo hướng ta điều khiển 
                 TestAndengineActivity.this.sprite.setPosition(TestAndengineActivity.this.sprite.getX() + pValueX, TestAndengineActivity.this.sprite.getY() + pValueY);
             }              
         }); 
        mDigitalOnScreenControl.getControlBase().setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
        mDigitalOnScreenControl.getControlBase().setAlpha(0.7f); 
        mDigitalOnScreenControl.getControlBase().setScaleCenter(0, 128); 
        mDigitalOnScreenControl.getControlBase().setScale(0.8f); 
        mDigitalOnScreenControl.getControlKnob().setScale(0.8f); 
        mDigitalOnScreenControl.refreshControlKnobPosition(); 
         
        MyScene.setChildScene(mDigitalOnScreenControl); 
         //============================================================================== 
         
        return MyScene;  
    }  

    @Override  
    public void onLoadComplete() {  
        // TODO Auto-generated method stub  
          
    }  
}  

 

theo vietandroid.com
 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.