degrés de convertir python au changement de x et y dans le changement
-
13-10-2019 - |
Question
Je fais un jeu de serpent en python avec pygame et pour déplacer le personnage que j'ai un entier qui est les degrés de l'angle, il doit se déplacer. Est-il possible que je peux 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]
La solution
import math
speed = 5
angle = math.radians(90) # Remember to convert to radians!
change = [speed * math.cos(angle), speed * math.sin(angle)]
Autres conseils
Le sinus et cosinus de l'angle, multiplié par le montant total du déménagement, vous donnera 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)
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 diviser simplement votre angle par l'incrément autorisé et obtenir un indice de direction, qui peut ensuite être utilisé pour indexer dans un tableau des décalages X / Y. Ce sera beaucoup plus rapide que d'utiliser 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, le concept Renoncer à angle entièrement et il suffit d'utiliser une variable de direction. Puis tourner le serpent est une question de simple incrémenter ou décrémenter 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é.