2014-01-13 2 views
0

Я использую обработчик времени для создания спрайтов в Andengine.Обнаружение столкновения созданного спрайта TimeHandler

Теперь я хочу обнаружить столкновение между этими спрайтами и другими спрайтами в той же Сцене.

Я попытался использовать приведенный ниже код, но он не работал должным образом.

Есть ли другой способ обнаружения столкновения?

//method to create sprite 

public void add() 

    { 
     mFaceCount++; 
     Random rand = new Random(); 
      int x = (int) CAMERA_WIDTH + mb1.getWidth(); 
     int minY = mb1.getHeight(); 
     int maxY = (int) (CAMERA_HEIGHT/2 - mb1 
      .getHeight()); 
     int rangeY = maxY + minY; 
     // int y = rand.nextInt(280) + 320; 
     int y=rand.nextInt(350-280) + 280; 

     int minDuration = 2; 
     int maxDuration = 3; 
     int rangeDuration = maxDuration - minDuration; 
     int actualDuration = rand.nextInt(rangeDuration) + minDuration; 

     if(this.mFaceCount%2==0) 
     { 
      targetSprite =new Sprite(x,y,mb4.clone()); 
      mScene.attachChild(b1); 
      B1= PhysicsFactory.createBoxBody(this.mPhysicsWorld, b1, BodyType.KinematicBody, FIXTURE_DEF); 

     } 
     else if(this.mFaceCount%3==0) 
     { 
      targetSprite =new Sprite(x,y,mb2.clone()); 
      mScene.attachChild(b1); 
      B1= PhysicsFactory.createBoxBody(this.mPhysicsWorld, b1, BodyType.KinematicBody, FIXTURE_DEF); 

     } 
     B1.setLinearVelocity(-5, 0); 
      mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(b1, B1, true, false) 
      { 
       @Override 
       public void onUpdate(float pSecondsElapsed) 
      { 
       super.onUpdate(pSecondsElapsed); 
      } 
     }); 


} 


// time handler 


private void createSpriteSpawnTimeHandler(){ 
     TimerHandler spriteTimerHandler; 
     float mEffectSpawnDelay = 2f; 
     spriteTimerHandler = new TimerHandler(mEffectSpawnDelay,true,new ITimerCallback(){ 
     @Override 
     public void onTimePassed(TimerHandler pTimerHandler) { 
      add(); 
     } 
     }); 
     getEngine().registerUpdateHandler(spriteTimerHandler); 
    } 



//update handler to detect collision 


IUpdateHandler updateHandler = new IUpdateHandler() 
    { 

     @Override 
     public void reset() { } 


     @Override 
     public void onUpdate(final float pSecondsElapsed) 
     { 




      if (hanger.collidesWith(targetSprite)) 
      { 
        System.out.println("Collision); 
        ; 
      } 


     } 
}; 
+1

«Я пытался, но не работал» Хорошо, вы показываете некоторые усилия к разрешению проблема, но нам нужно посмотреть, что вы пробовали, потому что мы не можем иначе сказать вам, что такое ДРУГИЕ способы. –

+0

см. Http://sscce.org/, чтобы узнать, как опубликовать код, связанный с вашим вопросом. –

+0

thnks ... Но знаете ли вы решение по этому вопросу? –

ответ

1

Сначала назначьте различные светильники на основе типов тел. Затем осуществить контакт слушателя для мира следующим образом:

CustomContactListener customContact = new CustomContactListener(bxWorld); 
      bxWorld.setContactListener(customContact); 




public class CustomContactListener implements ContactListener{ 
    World bxWorld; 
    UserData userDataA, userDataB; 
    Body bodyA, bodyB; 
    GamePlayLayer gameScene; 

    Fixture fixtureA, fixtureB; 
    public boolean isFirstCollision; 
    public ArrayList<Body> menHitList; 

    public CustomContactListener(World bxWorld) { 
     bxWorld.setContactListener(this); 
     this.bxWorld = bxWorld; 
     this.gameScene = GamePlayLayer.gameScene; 
     this.menHitList = new ArrayList<Body>(); 
    } 

    @Override 
    public void beginContact(Contact contact) { 
     fixtureA = contact.getFixtureA(); 
     fixtureB = contact.getFixtureB(); 

     bodyA = fixtureA.getBody(); 
     bodyB = fixtureB.getBody(); 

     userDataA = (UserData) bodyA.getUserData(); 
     userDataB = (UserData) bodyB.getUserData(); 
    } 

    @Override 
    public void endContact(Contact arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void postSolve(Contact arg0, ContactImpulse arg1) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void preSolve(Contact contact, Manifold arg1) { 
     Vector2[] contactVector = contact.getWorldManifold().getPoints(); 

     ObjectType objectTypeA = userDataA.getObjectType(); 
     ObjectType objectTypeB = userDataB.getObjectType(); 


     if((objectTypeA == ObjectType.ITEM_THROWN) && objectTypeB == ObjectType.BOUNDARY_BOTTOM_DOWN){ 

      // to remove multiple collisions 
      // to prevent projectile mirvs from scheduler 


     }else if(objectTypeA == ObjectType.BOUNDARY_BOTTOM_DOWN && objectTypeB == ObjectType.ITEM_THROWN){ 


     }  


    } 


} 

Вы можете осуществить то, что когда-либо столкновения вы хотите в этом

Смежные вопросы