Frage

Ich mache ein Schlangenspiel in Python mit Pygame und um den Charakter zu bewegen, habe ich eine Ganzzahl, die die Grade des Winkels ist, den er bewegen sollte. Gibt es eine Möglichkeit, die Änderung in X und Y zu erhalten, um sie basierend auf den Abschlüssen zu bewegen? Zum Beispiel: func(90) # [0, 5] oder func(0) # [5, 0]

War es hilfreich?

Lösung

import math

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

Andere Tipps

Der Sinus und Cosinus des Winkels, multipliziert mit der Gesamtmenge des Umzugs, gibt Ihnen die x- und y -Änderungen.

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)

Wenn sich die Schlange nur in bestimmten Winkeln (z. B. 90 oder 45 Grad) bewegen kann, was in einem solchen Spiel typisch ist, gibt es nur 4 oder 8 Richtungen, die Sie gehen können. Sie können Ihren Winkel einfach durch das zulässige Inkrement teilen und einen Richtungsindex erhalten, der dann verwendet werden kann, um in eine Tabelle mit X/Y -Offsets zu indexieren. Dies wird viel schneller sein als die Verwendung von Trigonometrie.

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

Besser noch, geben Sie vollständig auf das Winkelkonzept und verwenden Sie einfach eine Richtungsvariable. Anschließend ist das Drehen der Schlange eine einfache Angelegenheit der Inkrementierung oder Verringerung der Richtung.

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

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

Dies kann leicht auf 8 Richtungen (bei 45 Grad in Schritten) erweitert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top