Box2d, Cocos2D - тот же корпус, тот же импульс, но другой эффект - PullRequest
0 голосов
/ 26 декабря 2011

В моей игре каждые 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 голосов
/ 27 декабря 2011

Я не знаю, как вы вызываете этот метод, но я предлагаю вам лучше контролировать, где вы вызываете метод и где вы делаете шаг времени box2d, это может быть не связано с этим, но его стоит проверить из. Может случиться так, что импульс не будет применен, потому что решатель, который определяет скорость тела, не вызывается до тех пор, пока вы не сбросите силы (что, я полагаю, вы делаете), и, таким образом, эффект будет потерян.

...