2010-10-19 4 views
1

J'ai un jeu descendant pour iPhone (sans gravité) et j'utilise Cocos2d et Box2d.Le corps bouge trop vite après ApplyLinearImpulse()

J'essaie de déplacer une balle par ce code:

// 'targetPosition' is a point of touch 

b2Vec2 touchInWorld = b2Vec2(targetPosition.x/PTM_RATIO, targetPosition.y/PTM_RATIO); 

b2Vec2 direction = b2Vec2(touchInWorld.x - ballBodyDef.position.x, touchInWorld.y - ballBodyDef.position.y); 

b2Vec2 force = b2Vec2(direction.x, direction.y); 

force.Normalize(); 

ballBody->ApplyLinearImpulse(force, ballBodyDef.position); 

Le problème est que la balle se déplace rapidement si sa réputation à l'image-objet est petit (10x10 px). Si le sprite est de 50x50, la vitesse est plus petite et semble correcte.

Ça me rend fou parce que je ne peux pas contrôler la vitesse du tout.

Et non seulement cela, si je ne mets pas force.Normalize() la vitesse est différente en fonction de la direction du toucher ...

Tout fonctionnait bien quand j'utilisais juste Cocos2d et animations . J'ai essayé d'utiliser Box2d pour implémenter des collisions, mais il semble que ce soit une énorme quantité d'efforts que je considère faire la physique moi-même :(

Répondre

1

Première chose, je ne suis pas sûr, mais pourquoi divisez-vous par PTM_Ratios ici, je ne pense pas que vous Deuxièmement, 10x10 se déplace plus vite que 50x50 parce que vous définissez SetMassFromShapes, donc en supposant que vous créez un corps 50/PTM_RATIOSx50/PTM_RATIO pour sprite 50x50, le corps a une plus grande Troisièmement, vous utilisez Distance pour Impulse, donc vous n'allez pas normaliser, vous allez obtenir une impulsion proportionnelle. à votre distance

et pour la solution Hackish, si rien d'autre ne fonctionne pour vous suffit de diminuer le PTM_RATIO!

Questions connexes