在Android汽车游戏上需要帮助

时间:2014-04-18 12:21:18

标签: andengine 2d-games android

我正在为我的大学项目开发​​2D汽车游戏。

我已将其发展到用户的车可以移动并且交通车从上方来。但是我不知道如何在与交通车相撞时摧毁用户的车。任何人都可以告诉如何检测碰撞,之后如何破坏它。

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();

}

}

1 个答案:

答案 0 :(得分: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);
}