我正在試圖用Box2d做一個簡單的射擊遊戲。動態對象之間的Box2d碰撞
敵人和子彈都是動態的身體。我在屏幕左側創建敵人,然後對它們施加線性力量,使它們向右移動。玩家需要三次擊中敵人才能殺死它。
我的問題是,如果前兩次被子彈擊中,我怎麼能讓敵人繼續移動?現在,當敵人第一次被擊中時,它會被擊倒甚至被擊倒。我希望敵人只有在被殺的時候纔會這樣(第三次被擊中)。我應該怎麼做?
感謝您的任何建議!
一些代碼在這裏:
// Apply force
rock.isFlying = 1;
b2Vec2 force = b2Vec2(-2.0f*distance*cos,-2.0f*distance*sin);
rockBody->ApplyForce(force,rockBody->GetWorldCenter());
rockBody->SetLinearDamping(0.2f);
- (void)birdFly:(ccTime)dt{
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
ZLBird *myBird = (__bridge ZLBird*)b->GetUserData();
if (b->GetUserData() != NULL && myBird.tag == TAG_BIRD)
{
// Apply force
b2Vec2 gravityOffset;
gravityOffset.x = 0;
gravityOffset.y = myBird.multiplier*(myBird.startY - myBird.position.y);
if (!myBird.isDead)
b->ApplyForce(gravityOffset , b->GetWorldCenter());
}
}
}
void ContactListener::BeginContact(b2Contact* contact)
{
b2Body* bodyA = contact->GetFixtureA()->GetBody();
b2Body* bodyB = contact->GetFixtureB()->GetBody();
CCSprite* spriteA = (__bridge CCSprite*)bodyA->GetUserData();
CCSprite* spriteB = (__bridge CCSprite*)bodyB->GetUserData();
if (spriteA != NULL && spriteB != NULL)
{
// if hit by rock
if (spriteA.tag == -1 && spriteB.tag == TAG_BIRD){
ZLBird *myBird = (__bridge ZLBird*)bodyB->GetUserData();
ZLRock *myRock = (__bridge ZLRock*)bodyA->GetUserData();
[myBird getHurt];
}
else if(spriteB.tag == -1 && spriteA.tag == TAG_BIRD) {
ZLBird *myBird = (__bridge ZLBird*)bodyA->GetUserData();
ZLRock *myRock = (__bridge ZLRock*)bodyB->GetUserData();
[myBird getHurt];
}
}
}
我們可以看到一些代碼嗎? – Roecrew
當然!我剛剛編輯了這個問題。 – alanlzl
我可以看到getHurt方法嗎? – Roecrew