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

Bài 8: Xác định va chạm giữa 2 sprite [andengine]

Ngày đăng: 4/10/2012, 11:14:21PM | Lượt xem: 5,729
Hot!

 Để xác định xem 2 quả bóng có va chạm vào nhau không ta sử dụng phương thức sprite.collidesWith(sprite). Nếu va chạm thì nó return true, ngược lại là false

 Các bạn xem qua code sau:

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.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 = 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 sprite1,sprite2;//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 
      
    /** 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.PORTRAIT,  
                    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);  
    }  

    @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 = 0,y = 100  
        this.sprite1 = new Sprite(0, 100, this.textureRegion);  
        MyScene.attachChild(sprite1);//Add vào MyScene  
         
        //Đặt sprite2 tại vị trí x = 300,y = 100  
        this.sprite2 = new Sprite(300, 100, this.textureRegion);  
        MyScene.attachChild(sprite2);//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                  
            }  
              
            //Muốn cập nhật cái gì thì cho vào đây  
            @Override  
            public void onUpdate(float pSecondsElapsed) {   
                //Quả bóng đầu tiên là chạy từ phải qua trái 
                TestAndengineActivity.this.sprite1.setPosition(TestAndengineActivity.this.sprite1.getX()+1, TestAndengineActivity.this.sprite1.getY());
                 
                //Quả bóng thứ 2 sẽ chạy được lại từ trái qua phải 
                TestAndengineActivity.this.sprite2.setPosition(TestAndengineActivity.this.sprite2.getX()-1, TestAndengineActivity.this.sprite2.getY());
                 
                //Nếu 2 quảng bóng này va chạm vào nhau ta cho nó quay lại vị trí khởi tạo 
                if(TestAndengineActivity.this.sprite1.collidesWith(TestAndengineActivity.this.sprite2)){ 
                    TestAndengineActivity.this.sprite1.setPosition(0, TestAndengineActivity.this.sprite1.getY()); 
                    TestAndengineActivity.this.sprite2.setPosition(300, TestAndengineActivity.this.sprite2.getY()); 
                } 
            }  
        });  

        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.