2010-12-28 2 views
1

Je fais un jeu de serpent en python avec pygame et pour déplacer le personnage j'ai un nombre entier qui est le degré de l'angle qu'il doit déplacer. Y a-t-il un moyen d'obtenir le changement de x et y pour le déplacer en fonction des degrés? Par exemple: func(90) # [0, 5] ou func(0) # [5, 0]python convertir des degrés pour changer en x et changer en y

Répondre

9
import math 

speed = 5 
angle = math.radians(90) # Remember to convert to radians! 
change = [speed * math.cos(angle), speed * math.sin(angle)] 
+0

Court sur l'explication mais long sur l'exemple. –

4

Le sinus et le cosinus de l'angle, multiplié par la quantité totale du mouvement, vous donneront les changements X et Y.

import math 
def func(degrees, magnitude): 
    return magnitude * math.cos(math.radians(degrees)), magnitude * math.sin(math.radians(degrees)) 

>>> func(90,5) 
(3.0616169978683831e-16, 5.0) 
>>> func(0,5) 
(5.0, 0.0) 
+0

Byers, je ne connaissais pas math.radians, merci pour votre exemple! J'ai changé le mien pour correspondre. –

2

Si le serpent ne peut se déplacer sous certains angles (par exemple 90 ou 45 degrés), ce qui est typique dans un tel jeu, il n'y a que 4 ou 8 directions, vous pouvez aller. Vous pouvez simplement diviser votre angle par l'incrément autorisé et obtenir un index de direction, qui peut ensuite être utilisé pour indexer dans un tableau de décalages X/Y. Ce sera beaucoup plus rapide que l'utilisation de la trigonométrie.

x, y = 100, 100 # starting position of the snake 

direction = angle/90 % 4 # convert angle to direction 

directions = [(0,-1), (1, 0), (0, 1), (-1, 0)] # up, right, down, left 

# convert the direction to x and y offsets for the next move 
xoffset, yoffset = directions[direction] 

# calculate the next move 
x, y = x + xoffset, y + yoffset 

Mieux encore, passer du concept d'angle entièrement et il suffit d'utiliser une variable de direction. Ensuite, la rotation du serpent est une simple question d'incrémentation ou de décrémentation de la direction.

# rotate counter-clockwise 
direction = (direction - 1) % 4 

# rotate clockwise 
direction = (direction + 1) % 4 

Cela peut facilement être étendue à 8 directions (se déplaçant à incréments de 45 degrés), si désiré.

Questions connexes