2011-09-09 4 views
1

J'ai besoin de savoir comment utiliser box2d pour le mouvement du projectile.Mouvement de projectile en utilisant Box2d.

initialement, projectileTime = 0; puis j'appelle la fonction suivante pour le mouvement du projectile. Cela fonctionne plutôt bien. Mais je veux réaliser la même chose en utilisant box2d. Pour autant que je sache Box2d ne fonctionne qu'avec la force, il n'encourage pas à placer l'objet directement, Alors, comment utiliser Box2d pour le mouvement du projectile ??

-(void)projectilelaunched:(ccTime)dt 
{ 
    projectileTime+=(5*dt); 

    double vh=v*cos(theta); 

    x=vh*projectileTime; 

    double y = x*tan(theta)- 10*((x/vh)*(x/vh))/2; 

    projectile.position=ccp(projectilePositionBeforeLaunched.x + x,projectilePositionBeforeLaunched.y+y); 

} 

Répondre

2

Avec Box2D, vous auriez seulement besoin de définir sa position initiale et la vitesse initiale (via applyForce). Box2d prendra soin du reste, l'application de la gravité, l'arrêt en frappant d'autres objets, etc.

1

En fait, vous pouvez directement mettre en place la position du corps en appelant:

body->SetTransform(vector,angle) 
+1

Mais ce calcul EXIGE manuellement la position, ce qui est un peu bizarre quand vous avez déjà la puissance de la simulation de la physique à votre main. – Lukman

+0

@gixdev, votre réponse est également utile. – russell

1
b2Vec2 vector = self.speed * b2Vec2(cos(angle), sin(angle)); 

self.projectileBody->SetLinearVelocity(vector); 
Questions connexes