Pregunta

Estoy haciendo un juego de la serpiente pitón en la pygame y para mover el personaje Tengo un número entero que es los grados del ángulo que debe moverse. ¿Hay alguna manera de conseguir el cambio en x e y para moverlo basa en los grados? Por ejemplo: func(90) # [0, 5] o func(0) # [5, 0]

¿Fue útil?

Solución

import math

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

Otros consejos

el seno y el coseno del ángulo, multiplicada por la cantidad total de movimiento, le dará la X y cambia 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 la serpiente sólo puede moverse en ciertos ángulos (por ejemplo, 90 o 45 grados), lo cual es típico en tales un juego, sólo hay 4 o 8 direcciones puede ir. Usted puede simplemente dividir el ángulo por el incremento permitido y obtener un índice de dirección, que puede ser utilizado para indexar en una tabla de desplazamientos X / Y. Esto va a ser mucho más rápido que el uso de la trigonometría.

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

Mejor aún, dispensación con el concepto de ángulo completamente y sólo tiene que utilizar una variable de dirección. Entonces la rotación de la serpiente es un simple cuestión de incrementar o decrementar la dirección.

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

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

Esto puede fácilmente ser extendido a 8 direcciones (que se mueven a incrementos de 45 grados) si se desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top