Box2d,Cocos2D - 同样的身体,同样的冲动,但效果不同

时间:2011-12-26 18:04:25

标签: cocos2d-iphone box2d

在我的游戏中每2秒我创建一个新的身体,然后我对这个Box2d身体施加冲动。

我的问题是冲动仍然相同,但身体的行为有两种:

它慢慢上升,或者另一次它迅速下降

我希望身体在冲动后以同样的方式行事,是否可能?

代码:

- (void)newBullet
{
CGPoint touchedAt;
touchedAt.x = 184;
touchedAt.y = 1200;
bullet = [CCSprite spriteWithSpriteSheet:spriteSheet  rect:CGRectMake(586, 719, 32, 32)];
[spriteSheet addChild: bullet z: 10 tag: 8];

bullet.position = ccp( touchedAt.x , touchedAt.y);
bullet.rotation = 90;
bulletBodyDef.type = b2_dynamicBody;
bulletBodyDef.position.Set(touchedAt.x / PTM_RATIO, touchedAt.y / PTM_RATIO);
bulletBodyDef.userData = bullet;
bulletBodyDef.angle = CC_DEGREES_TO_RADIANS( 90 );
bulletBody = _world->CreateBody(&bulletBodyDef);

b2CircleShape bulletShape;
bulletShape.m_radius = bullet.contentSize.width/PTM_RATIO/2;

b2FixtureDef bulletShapeDef;
bulletShapeDef.shape = &bulletShape;
bulletShapeDef.density = 0.0f;
bulletShapeDef.friction = 0.9f;
bulletShapeDef.restitution = 0.0f;
bulletShapeDef.isSensor = false;
bulletFixture = bulletBody->CreateFixture(&bulletShapeDef);

b2Vec2 force = b2Vec2(6.0f, 4.0f );
bulletBody->ApplyImpulse(force, bulletBody->GetPosition());
}

视频(抱歉质量很差,但你可以看到我的意思)  http://vimeo.com/34215327

1 个答案:

答案 0 :(得分:0)

我不知道您是如何调用此方法的,但我建议您可以更好地控制调用方法的位置以及执行box2d时间步的位置,它可能与此无关,但值得检查出。可能发生的是脉冲没有被应用,因为决定身体速度的求解器在你重置力(我假设你正在做)之前不会被调用,因此效果会丢失。