2014-04-18 75 views
4

我正在爲我的大學項目開發​​2D汽車遊戲。需要關於Android汽車遊戲的幫助

我已經開發了它,直到用戶的汽車可以移動並且交通車從上面來。但我不知道如何在與交通車相撞時摧毀用戶的汽車。任何人都可以告訴如何檢測碰撞,之後如何摧毀它。

public class MainActivity extends BaseGameActivity{ 


Scene scene; // declare a scene object 
protected static final float CAMERA_WIDTH = 800; // define camera width 
protected static final float CAMERA_HEIGHT = 520; //define camera height 

/*----- background -----------*/ 

BitmapTextureAtlas backbitmapTextureAtlas; // declare a bitmap texture 
ITextureRegion backiTextureRegion; // declare a i texture region to hold image 
Sprite backsPlayer; // sprite to display the image 
PhysicsWorld backpWorld; 
SensorManager backsensor; 
Vector2 backvec; 
ITexture backparallax_background; 
protected VertexBufferObjectManager backvbom; 
org.andengine.engine.camera.Camera camera; 

/*----- /background -----------*/ 

/*----user's car---------*/ 

BitmapTextureAtlas bitmapTextureAtlas; 
ITextureRegion iTextureRegion; 
Vector2 vec; 
PhysicsWorld pWorld; 
SensorManager sensor; 
Sprite sPlayer; 

/*----/user's car---------*/ 



/*------ traffic cars----------*/ 


BitmapTextureAtlas bitmapTextureAtlasTraffic1; 
ITextureRegion iTextureRegionTraffic1; 
Sprite sPlayerTraffic1; 

BitmapTextureAtlas bitmapTextureAtlasTraffic2; 
ITextureRegion iTextureRegionTraffic2; 
Sprite sPlayerTraffic2; 

BitmapTextureAtlas bitmapTextureAtlasTraffic3; 
ITextureRegion iTextureRegionTraffic3; 
Sprite sPlayerTraffic3; 

BitmapTextureAtlas bitmapTextureAtlasTraffic4; 
ITextureRegion iTextureRegionTraffic4; 
Sprite sPlayerTraffic4; 


MoveXModifier mod1; 
MoveXModifier mod2; 
MoveXModifier mod3; 
MoveXModifier mod4; 

/*------ /traffic cars----------*/ 

@Override 
public EngineOptions onCreateEngineOptions() { 
    // TODO Auto-generated method stub 

    camera = new org.andengine.engine.camera.Camera(0,0,CAMERA_WIDTH,CAMERA_HEIGHT); // create camera 
    EngineOptions options= new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH,CAMERA_HEIGHT), camera); //create engine options 

    return options; 
} 


@Override 
public void onCreateResources(
     OnCreateResourcesCallback pOnCreateResourcesCallback) 
     throws Exception { 
    // TODO Auto-generated method stub 



    /* ---------------parallax back code------------------*/ 

    backparallax_background = new AssetBitmapTexture(this.getTextureManager(), this.getAssets(), "gfx/back2.png"); 
    backiTextureRegion = TextureRegionFactory.extractFromTexture(this.backparallax_background); 
    this.backparallax_background.load(); 

    /* ---------------/parallax back code------------------*/ 


    loadGfx(); // load user's car 
    loadTraffic(); 

    pOnCreateResourcesCallback.onCreateResourcesFinished(); 
} 



/*--------load traffic cars------------*/ 

private void loadTraffic() { 
    // TODO Auto-generated method stub 

    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); // give the path of image folder 
    bitmapTextureAtlasTraffic1 = new BitmapTextureAtlas(getTextureManager(), 256, 256);// create a bit map to hold the picture and give size according to the image 
    iTextureRegionTraffic1 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(bitmapTextureAtlasTraffic1, this, "traffic1.png", 0,0); 
    bitmapTextureAtlasTraffic1.load(); 

    //----- traffic 2-------------- 

    bitmapTextureAtlasTraffic2 = new BitmapTextureAtlas(getTextureManager(), 256, 256);// create a bit map to hold the picture and give size according to the image 
    iTextureRegionTraffic2 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(bitmapTextureAtlasTraffic2, this, "traffic2.png", 0,0); 
    bitmapTextureAtlasTraffic2.load(); 

    //----- traffic 3-------------- 

    bitmapTextureAtlasTraffic3 = new BitmapTextureAtlas(getTextureManager(), 256, 256);// create a bit map to hold the picture and give size according to the image 
    iTextureRegionTraffic3 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(bitmapTextureAtlasTraffic3, this, "traffic3.png", 0,0); 
    bitmapTextureAtlasTraffic3.load(); 

    //----- traffic 4-------------- 

    bitmapTextureAtlasTraffic4 = new BitmapTextureAtlas(getTextureManager(), 256, 256);// create a bit map to hold the picture and give size according to the image 
    iTextureRegionTraffic4 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(bitmapTextureAtlasTraffic4, this, "traffic4.png", 0,0); 
    bitmapTextureAtlasTraffic4.load(); 


} 





/*--------load user's car------------*/ 
private void loadGfx() { 
    // TODO Auto-generated method stub 

    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); // give the path of image folder 
    bitmapTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 256, 256);// create a bit map to hold the picture and give size according to the image 
    iTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(bitmapTextureAtlas, this, "usercar.png", 0,0); 
    bitmapTextureAtlas.load(); 

} 

/*--------load user's car------------*/ 


@Override 
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) 
     throws Exception { 
    // TODO Auto-generated method stub 

    scene = new Scene(); // create the object of scene 

    /*------ parallax background---------*/ 

    final AutoParallaxBackground auto_background = new AutoParallaxBackground(0, 0, 0, 200);    
    final Sprite background_sprite = new Sprite(0,0, this.backiTextureRegion,backvbom); 
    auto_background.attachParallaxEntity(new ParallaxEntity(1.7f,background_sprite)); 
    scene.setBackground(auto_background); 



    pOnCreateSceneCallback.onCreateSceneFinished(scene); 

} 



@Override 
public void onPopulateScene(Scene pScene, 
     OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception { 
    // TODO Auto-generated method stub 



    // set traffic car1 




    sPlayerTraffic1 = new Sprite(10,350,iTextureRegionTraffic1,this.mEngine.getVertexBufferObjectManager()); 
    sPlayerTraffic2 = new Sprite(300,280,iTextureRegionTraffic2,this.mEngine.getVertexBufferObjectManager()); 
    sPlayerTraffic3 = new Sprite(400,190,iTextureRegionTraffic3,this.mEngine.getVertexBufferObjectManager()); 
    sPlayerTraffic4 = new Sprite(50,70,iTextureRegionTraffic4,this.mEngine.getVertexBufferObjectManager()); 

    mod1=new MoveXModifier(5,-600,800){ 


     @Override 
     protected void onModifierFinished(IEntity pItem) { 
     // TODO Auto-generated method stub 
      Random r = new Random(); 
      int y = r.nextInt(370-350)+350;// set y randomly 
      int speed = r.nextInt(3-2)+3; // set speed randomly 
      sPlayerTraffic1.setY(y); // set y 
      int x = r.nextInt(800-500)+200; // set x randomly 
      x = -x; 
      mod1.reset(speed, x, 800); 
     super.onModifierFinished(pItem); 
     } 



    };// moving down the traffic1 car 

    mod2=new MoveXModifier(4,200,800){ 


     @Override 
     protected void onModifierFinished(IEntity pItem) { 
     // TODO Auto-generated method stub 
      Random r = new Random(); 
      int y = r.nextInt(300-285)+285; // set y randomly 
      int speed = r.nextInt(5-3)+3; // set speed randomly 
      sPlayerTraffic2.setY(y); // set y 
      int x = r.nextInt(600-200)+200; // set x randomly 
      x = -x; 
      mod2.reset(speed, x, 800); 
     super.onModifierFinished(pItem); 
     } 


    };// moving down the traffic2 car 

    mod3=new MoveXModifier(3,-600,800){ 


     @Override 
     protected void onModifierFinished(IEntity pItem) { 
     // TODO Auto-generated method stub 
      Random r = new Random(); 
      int y = r.nextInt(190-150)+150; 
      int speed = r.nextInt(3-2)+2; 
      if(speed == 2){ 
       y = 150; 
      } 
      sPlayerTraffic3.setY(y); 
      int x = r.nextInt(2000-800)+800; 
      x = -x; 
      mod3.reset(speed, x, 800); 
     super.onModifierFinished(pItem); 
     } 


    };// moving down the traffic3 car 


    mod4=new MoveXModifier(3,50,800){ 


     @Override 
     protected void onModifierFinished(IEntity pItem) { 
     // TODO Auto-generated method stub 
      Random r = new Random(); 
      int y = r.nextInt(100-70)+70; 
      int speed = r.nextInt(3-2)+2; 
      sPlayerTraffic4.setY(y); 
      int x = r.nextInt(600-200)+200; 
      x = -x; 
      mod4.reset(speed, x, 800); 
     super.onModifierFinished(pItem); 
     } 




    };// moving down the traffic4 car 




    sPlayerTraffic1.registerEntityModifier(mod1); 
    sPlayerTraffic2.registerEntityModifier(mod2); 
    sPlayerTraffic3.registerEntityModifier(mod3); 
    sPlayerTraffic4.registerEntityModifier(mod4); 


    //now set the x,y coordination of the image to display the right position we want 
    sPlayer = new Sprite(500,350,iTextureRegion,this.mEngine.getVertexBufferObjectManager()){ // user's car x,y 


     // touch event for user's car 
     @Override 
     public boolean onAreaTouched(org.andengine.input.touch.TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) 
     { 

       this.setPosition(500 , pSceneTouchEvent.getY()); 


      //website code 
      this.setPosition(pSceneTouchEvent.getX(), 
        this.getY()); 

    //Detects if player is outside of bounds 
    final float width = this.getWidth(); 
    final float height = this.getHeight(); 
    float x = pSceneTouchEvent.getX() - width/2 ; 
    float y = pSceneTouchEvent.getY() - height/2; 

    if (x < 0) 
      x = 0; 
    if (y < 65) // right side of the road 
      y = 65; 

    if (x > (CAMERA_WIDTH - width)) 
      x = CAMERA_WIDTH - width; 
    if (y > (CAMERA_HEIGHT - height-70)) // left side of the road 
      y = (CAMERA_HEIGHT - height-70); 

    this.setPosition(500, y); 



     return true; 
     } 



    }; 
    //touch ---------------------------------------------------------- 

    scene.registerTouchArea(sPlayer); 
    //----------------------------------------------------------------- 


    this.scene.attachChild(sPlayer); 
    this.scene.attachChild(sPlayerTraffic1); 
    this.scene.attachChild(sPlayerTraffic2); 
    this.scene.attachChild(sPlayerTraffic3); 
    this.scene.attachChild(sPlayerTraffic4); 


    pOnPopulateSceneCallback.onPopulateSceneFinished(); 

} 

}

回答

0
private ContactListener createContactListener() 
{ 
    ContactListener contactListener = new ContactListener() 
    { 
     @Override 
     public void beginContact(Contact contact) 
     { 
      final Fixture x1 = contact.getFixtureA(); 
      final Fixture x2 = contact.getFixtureB(); 

      if(x1==PlayerBody && x2==EnemyBody){ 
       DestroyMethod(); 
      } 
     } 

    }; 
    return contactListener; 
} 

YourPhysicsWorld.setContactListener(createContactListener()); 

private void DestroyMethod(){ 
    YourPhysicsWorld.destroyBody(EnemyBody); 
} 
+0

非常感謝您@Zapdos – user3548823