#python #coordinates #pygame #degrees
#python #координаты #pygame #градусы
Вопрос:
Я создаю игру snake на python с помощью pygame, и для перемещения символа у меня есть целое число, представляющее собой градусы угла, под которым он должен перемещаться. Есть ли какой-либо способ, которым я могу получить изменение в x и y, чтобы переместить его на основе градусов? Например: func(90) # [0, 5]
или func(0) # [5, 0]
Ответ №1:
import math
speed = 5
angle = math.radians(90) # Remember to convert to radians!
change = [speed * math.cos(angle), speed * math.sin(angle)]
Комментарии:
1. Краткое объяснение, но длинный пример.
Ответ №2:
Синус и косинус угла, умноженные на общую величину перемещения, дадут вам изменения в X и 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)
Комментарии:
1. Байерс, я не знал о math.radians, спасибо за ваш пример! Я изменил свой, чтобы соответствовать.
Ответ №3:
Если змея может двигаться только под определенными углами (например, 90 или 45 градусов), что типично для такой игры, вы можете двигаться только в 4 или 8 направлениях. Вы можете просто разделить свой угол на допустимое приращение и получить индекс направления, который затем можно использовать для индексации в таблицу смещений X / Y. Это будет намного быстрее, чем использование тригонометрии.
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
А еще лучше, полностью отказаться от концепции угла и просто использовать переменную направления. Тогда поворот змеи — это простой вопрос увеличения или уменьшения направления.
# rotate counter-clockwise
direction = (direction - 1) % 4
# rotate clockwise
direction = (direction 1) % 4
При желании это можно легко расширить до 8 направлений (перемещение с шагом 45 градусов).