2011-06-01 5 views
0

J'ai rencontré un problème étrange concernant le positionnement des corps dans cocos2d/box2d.box2d Problème de position b2_staticBody

Si je définis le type b2BodyDef comme b2_staticBody, je ne peux pas définir de corps sur une position quelconque parmi les multiplicateurs de PTM_RATIO. Permettez-moi de vous expliquer:

#define PTM_RATIO 32.0 

... 
myBodyDef_1.type = b2_staticBody; 
myBodyDef_1.position.Set(320.0/PTM_RATIO, 320.0/PTM_RATIO); 
... 

et

... 
myBodyDef_1.type = b2_staticBody; 
myBodyDef_1.position.Set(333.0/PTM_RATIO, 333.0/PTM_RATIO); 
... 

donne le même résultat. Pas de changement de position. La différence de 13 pixels ne veut rien dire.

Si je fais la différence plus que PTM_RATIO il apparaît 1 PTM_RATIO (32px).

Par exemple:

... 
myBodyDef_1.type = b2_staticBody; 
myBodyDef_1.position.Set(358.0/PTM_RATIO, 358.0/PTM_RATIO); 
... 

Diffrence de 38px, mais il semble que 32px (1 PTM_RATIO) loin.

J'ai essayé d'utiliser des valeurs directes comme 1.0 et 1.1 Cela n'a pas fonctionné. Je ne peux pas me débarrasser des multiplicateurs de PTM_RATIO. Une autre indication, si j'utilise b2_kinematicBody comme type, cela fonctionne parfaitement.

Une idée?

+0

et quelle position est indiquée par le débogueur? – Andrew

+0

320.0 et 333.0 apparaissent tous les deux sur 320. 358.0 apparaît sur 352 – erkanyildiz

Répondre

1

essayez d'ajouter une conversation explicite: 358.0/((float)PTM_RATIO). essayez myBodyDef_1.position = b2Vec2 (333.0/PTM_RATIO, 333.0/PTM_RATIO); et une conversation explicite ici. try

float x = 333.0/PTM_RATIO; 
float y = 333.0/PTM_RATIO; 
myBodyDef_1.position = b2Vec2(x, y); 

Laissez-moi le résultat s'il vous plaît

+0

358.0/(flottant) PTM_RATIO travaillé. c'est bizarre parce que donner une valeur directe (11.1875) ne fonctionne pas. – erkanyildiz

-1

myBodyDef_1.position.Set(333.0/PTM_RATIO, 333.0/PTM_RATIO); ici 333/PTM_RATIO, donne résultat dans la fraction qui a toujours été arrondie à sa partie inférieure, entière, donc ici vous ne pouvez pas traiter, seul ou moins de 32 pixels.

Incase de 358/32 (PTM_Ratio), il va dans le 11ème bloc (320 est 10ème) donc il vous fournira la prochaine position.

+0

333.0/32.0 ou 333.0/32 ou 333/32.0 est une valeur flottante, pas entier. Ce n'est pas la même chose que 333/32 – Andrew

+0

ouais mais ceux-ci renverront des valeurs avec le nombre (1-9) après décimal.that n'est pas acceptable par Set comme une position. – rptwsthi

+0

La méthode set nécessite deux paramètres float, et non un entier. et comme je l'ai dit plus haut, le type de corps cinématique fonctionne parfaitement. – erkanyildiz

Questions connexes