2013-08-09 1 views
0

글라이더 PRO와 비슷한 게임을 만들고 있습니다. 게임에서는 종이 비행기를 제어하고 통풍구를 사용하여 바닥에 떨어지지 않도록합니다. 비행기가 공기 통풍구와 충돌하면 (충돌을 사용하여) 비행기를 밀어 올립니다. 이제 여기에 문제가 있습니다. 두 개의 공기 통풍구를 현장에 부착하면 첫 번째 부착 통풍구 만 작동합니다. 두 번째 비행기는 비행기와 충돌하지 않는 것 같습니다. 나는 각 공기 벤트에서 onManagedUpdate 메서드를 사용하여 충돌을 확인합니다. 이것은 AndEngine으로 코딩 한 첫 번째 시간이므로 이에 대한 도움을 주시면 감사하겠습니다.AndEngine, 충돌에 영향을 미치는 동일한 엔티티 중 2 개 붙임

public class AirVent extends Rectangle 
{ 
private Sprite sprite; 
private Glider glider; 

public AirVent(float pX, float pY, float pWidth, float pHeight, 
     VertexBufferObjectManager pVertexBufferObjectManager, 
     ITextureRegion pITextureRegion) 
{ 
    super(pX, pY, pWidth, pHeight, pVertexBufferObjectManager); 
    sprite = new Sprite(0, 0, pITextureRegion, pVertexBufferObjectManager); 
    sprite.setSize(pWidth, pWidth/2); 
    sprite.setPosition((pWidth/2) - (sprite.getWidth()/2), pHeight 
      - sprite.getHeight()); 
    this.attachChild(sprite); 
    this.setAlpha(0); 
} 

public Sprite getSprite() 
{ 
    return sprite; 
} 

public void checkCollision() 
{ 
    if (glider.collidesWith(this)) 
    { 
     glider.setGravity(glider.getConstantGravity() * -1f); 
    } 
    else 
    { 
     glider.setGravity(glider.getConstantGravity()); 
    } 

} 

public void applyGliderInteraction(Glider glider) 
{ 
    this.glider = glider; 
} 

@Override 
public void onManagedUpdate(float secondsElapsed) 
{ 
    this.checkCollision(); 
    super.onManagedUpdate(secondsElapsed); 
} 
} 

그리고 MainActivity 코드 부분 :

@Override 
protected Scene onCreateScene() 
{ 
    // TODO Auto-generated method stub 
    // 1 - Create new scene 
    final Scene scene = new Scene(); 
    Sprite backgroundSprite = new Sprite(0, 0, this.mBackground, getVertexBufferObjectManager()); 
    scene.attachChild(backgroundSprite); 
    roomChanger = new RoomChanger(0, 0, screenWidth, screenHeight, getVertexBufferObjectManager(), scene); 
    // 2 - Create the player 
    player1 = new Glider(339, 174, this.mPlayerGlider1, getVertexBufferObjectManager()) 
    { 
     @Override 
     public void onManagedUpdate(float secondsElapsed) 
     { 
      if (player1.getLife() == 0) 
      { 
       // Execute your actions. 
       finish(); 
      } 
      super.onManagedUpdate(secondsElapsed); 
     } 
    }; 
    scene.attachChild(player1); 
    airVent = new AirVent(200, 100, 100, 400, getVertexBufferObjectManager(), this.mAirVent); 
    airVent.applyGliderInteraction(player1); 
    airVent2 = new AirVent(500, 100, 100, 400, getVertexBufferObjectManager(), this.mAirVent); 
    airVent2.applyGliderInteraction(player1); 
    scene.attachChild(airVent); 
    scene.attachChild(airVent2); 
    createControllers(); 
    return scene; 
} 
+0

몇 가지 코드를 게시하십시오. –

답변

0

내가 문제를 발견 여기

는 AirVent 코드입니다. checkCollison() 메서드는 작동하지만 두 번째 AirVent를 추가하면 if/else 문이 서로 충돌합니다. checkCollision() 메서드에서 else 문을 제거하면 문제가 해결되었지만 지금은 게임이 작동하는 방식이 아닙니다.

관련 문제