我正在使用_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