2013-03-17 1 views
1

Je pense que cette question est un peu mais stupide mais je ne trouve pas la réponse.Mise à jour de la position d'un objet avec une vitesse constante, quelle que soit la direction

Je fais le jeu classique pong. Et je veux que la balle passe à la même vitesse pour n'importe quel angle. Mais avec mon algorithme actuel (incrémentant x par un et calculant y) si le a dans y = ax + b est haut il y a de grands espaces entre chaque pixel. Quelle étape devrais-je utiliser?

+0

Vous souhaitez utiliser le type double/float pour stocker les valeurs x, y ainsi que les valeurs de vitesse de la balle, puis utiliser int int (fonte) uniquement lorsque vous la dessinez. Ensuite, suivez l'exemple de Dukeling. – SGM1

Répondre

2

Nous avons donc quelque chose comme ceci:

newPoint 
    |\ 
    | \ 
y | \ r 
    | θ\ 
    |----- 
    x oldPoint 

Ce que vous voulez essentiellement est de faire un pas dans la distance liée à r, pas x.

De TRIG élémentaire:
cos θ = x/r
et sin θ = y/r

Alors newX = oldX + r * cos θ
et newY = oldY + r * sin θ

Vous pouvez jouer avec la valeur de r (ce sera essentiellement la vitesse de déplacement).

θ sera la direction de la balle.

2

Vous avez défini un paramètre par défaut speed. Ensuite, vous pouvez utiliser x+=speed*cos(theta) et y+=speed*sin(theta). Quand vous frappez, vous devez changer theta.

Questions connexes