Aller au contenu


Photo

[Résolu] SpriteKit : poussée étrange de applyImpulse

SpriteKit poussée applyImpulse

  • Please log in to reply
4 réponses à ce sujet

#1 berfis

berfis

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 702 messages
  • LocationLausanne, Suisse

Posté 08 janvier 2017 - 18:57

Bonjour,

 

Je dirige latéralement mon vaisseau, qui baigne dans un champ de gravité, à l'aide de "thrusters" gauche et droit.

 

J'ai factorisé les thrusters, qui poussent toujours dans la direction opposée à leur orientation. Mais j'obtiens une poussée étrange, qui semble dirigée dans la mauvaise direction.

 

C'est peut-être juste des maths mal utilisées:

[Class Engine: SKSpriteNode]

- (void) setOn
{
    self.hidden = NO;
    float dir = self.zRotation+M_PI_2;
    [self.parent.physicsBody applyImpulse: CGVectorMake(self.force*cosf(dir), self.force*sinf(dir))];
} 

Une petite image pour mieux me faire comprendre.

Fichier(s) joint(s)


_______________________________________________________________

Applications OSX sur le site de la BDRP

AutoTextAutoVerbDemiurge et Evals


#2 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 324 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 09 janvier 2017 - 09:13

Les maths me semblent bonnes. Ce ne serait pas plutôt la force qui serait mal calibrée ?
RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#3 berfis

berfis

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 702 messages
  • LocationLausanne, Suisse

Posté 09 janvier 2017 - 18:10

Si les maths sont bonnes, je ne vois qu'une explication:

 

- Mon vaisseau lutte contre la gravité à l'aide de son moteur principal, qui exerce une poussée vers le haut.

- Mes thrusters ajoutent (théoriquement) une poussée latérale.

 

mais tout se passe comme si, dans un cycle, on ne pouvait exercer qu'une seule poussée à la fois, en d'autres termes, quand les thrusters sont en marche, le moteur principal n'exerce plus de poussée, et le vaisseau part en chute libre.

 

D'où question: ne peut-on, dans un cycle, n'exercer qu'une seule poussée sur un corps? Est-ce mentionné quelque part? Si oui, dois-je du coup additionner les poussées "manuellement" et n'en effectuer qu'une ?

 

EDIT: C'est bon, j'ai trouvé. Quand j'appuie sur la touche gauche ou droite pour lancer les thrusters, le keyDown event "bouffe" des cycles update, dans lequel le moteur principal effectue sa poussée. Par contre, la gravité continue de s'appliquer, et donc le vaisseau tombe comme une pierre (mais en diagonale).

 

J'ai sorti la poussée du moteur principal du cycle update, de façon à pouvoir l'appeler depuis la routine qui gère les keyDown.

 

Ce n'était pas la faute de SK, mais une erreur de design de ma part. Désolé.


_______________________________________________________________

Applications OSX sur le site de la BDRP

AutoTextAutoVerbDemiurge et Evals


#4 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 324 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 09 janvier 2017 - 18:27

Je ne pense pas que ce soit le problème.

Que se passe-t-il si tu écris ça:
[self.parent.physicsBody applyImpulse: CGVectorMake(self.force, 0.0)];
Et c'est normal que tu prennes self.zRotation mais que tu appliques l'impulsion sur le parent ?
RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#5 berfis

berfis

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 702 messages
  • LocationLausanne, Suisse

Posté 09 janvier 2017 - 18:49

@Céroce: Oui, c'est normal: la poussée agit sur le vaisseau-parent, pas sur le thruster lui-même.

Fichier(s) joint(s)


_______________________________________________________________

Applications OSX sur le site de la BDRP

AutoTextAutoVerbDemiurge et Evals






Also tagged with one or more of these keywords: SpriteKit, poussée, applyImpulse

0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)