我正在使用_world-> step(dt,5,5)來檢測碰撞系統。所以碰撞實際上是由box2d類來處理的。現在我想根據與哪個球碰撞來顯示球碰撞的得分?想要在cocos2d和box2d應用程序中的球碰撞上顯示標籤
任何人都可以幫我解決這個問題嗎?如果你們想要,我可以根據需要提供打勾功能的源代碼。
您的幫助表示讚賞。
謝謝
安基塔
我正在使用_world-> step(dt,5,5)來檢測碰撞系統。所以碰撞實際上是由box2d類來處理的。現在我想根據與哪個球碰撞來顯示球碰撞的得分?想要在cocos2d和box2d應用程序中的球碰撞上顯示標籤
任何人都可以幫我解決這個問題嗎?如果你們想要,我可以根據需要提供打勾功能的源代碼。
您的幫助表示讚賞。
謝謝
安基塔
爲每一個身體和碰撞蜱功能檢查夾具...
if((contact.fixtureA == fixture1 && contact.fixtureB == fixture2) ||
(contact.fixtureA == fixture2 && contact.fixtureB == fixture1))
{
//do something
}
希望這有助於!!!!
首先,繼承了C++類b2ContactListener,例如:
class GamePhysicsContactListener : public b2ContactListener
{
public:
GamePhysicsContactListener();
~GamePhysicsContactListener();
void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);
};
落實PostSolve
方法做就兩個機構相互接觸通過檢查:
b2Body *bodyA = contact->GetFixtureA()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();
最後,通過在實例化您的b2World
(最可能在您的CCLayer init
方法中)的方法中調用下面的行來實例化偵聽器:
_world->SetContactListener(new GamePhysicsContactListener());
p/s:不是在GamePhysicsContactListener類中執行聯繫檢查邏輯,也可以讓該類接受一個目標和一個使用NSInvocation調用的選擇器。不過這會更復雜一些。
編輯:
這裏是GamePhysicsContactListener的工作實現:https://gist.github.com/922824(這是我的私人GamePhysics框架的一部分,該橋樑的cocos2d &的Box2D類)
這裏是我用來表現出一點的方法碰撞後的動畫。它可以非常容易地修改爲顯示標籤而不是動畫。
-(void) paintCollisionImage:(CGPoint) point{
CGSize screenSize = self.view.bounds.size;
CGRect myImageRect = CGRectMake((point.x -24), ((screenSize.height - point.y) -24), 48.0f, 48.0f);
NSArray *myImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"collideImage0.png"],
[UIImage imageNamed:@"collideImage1.png"],
nil];
UIImageView *myAnimatedView = [UIImageView alloc];
[myAnimatedView initWithFrame:myImageRect];
myAnimatedView.animationImages = myImages;
myAnimatedView.animationDuration = 0.25; // seconds
myAnimatedView.animationRepeatCount = 1; // 0 = loops forever
[myAnimatedView startAnimating];
[self.view addSubview:myAnimatedView];
[myAnimatedView release];
}
我叫它像這樣:
[self paintCollisionImage:collisionPoint];
我面臨同樣的問題。我想在玩家擊中力量時顯示標籤。爲此,我在CCScene中創建了一個靜態函數,它在場景中添加了一個標籤。在ContactListener中,我使用beginContact方法初始化場景對象,然後調用場景函數。
+(void)addPointLabel
{
DataClass *d5=[DataClass getInstance];
[_label setString:@"+10"]; // Define label in init
_label.color = ccc3(0,255,0);
_label.position = ccp(d5.playerXPosition,d5.playerYPosition);
[self addChild:_label];
d5.lbl=_label;
id action1 = [CCMoveTo actionWithDuration:2 position:ccp(d5.playerXPosition,d5.playerYPosition+20)];
id action2 = [CCFadeOut actionWithDuration:1.0f];
[_label runAction: [CCSequence actions:action1,action2, nil]];
}
現在調用這個方法在你ContactListener類:
[GameScene addPointLabel];
感謝您的答覆。實際上碰撞已經在box2d裏面處理了。我不需要發展。但我需要的是每當它碰撞它應該顯示標籤。而且我不明白哪個函數可以處理這個問題。因爲Collission.cpp是box2D類,而_world-> step實際上是在做所有事情。說得通? – Anks 2011-04-15 17:19:35
我think.You在box2d.Assign此創建身體這樣FD-> createFixture(體)成b2Fixture.ie,fixture1 = FD-> createFixture(體)。對於每個本體你必須與夾具和蜱分配方法,使用上面的代碼來檢查物體的碰撞(這裏檢測到碰撞是爲了找出哪兩個物體碰撞)。 – Anish 2011-04-15 17:33:07