Ich bin kürzlich zu XNA gekommen und muss sagen, dass ich es liebe. Als eine Art Hallo-Welt-Spiel habe ich beschlossen, das klassische Spiel "Snake" zu erstellen. Die 90-Grad-Version war sehr einfach und leicht zu implementieren. Aber als ich versuche, eine Version davon zu erstellen, die eine 360-Grad-Drehung mit den Pfeilen nach links und rechts ermöglicht, bin ich auf ein Problem gestoßen.
Was ich jetzt mache, stammt aus der 90-Grad-Version: Durch jedes Schlangenkörperteil iterieren, beginnend am Schwanz und endend direkt vor dem Kopf. Dies funktioniert hervorragend, wenn alle 100 Millisekunden verschoben wird. Das Problem dabei ist, dass es zu einem abgehackten Spielstil führt, da das Spiel technisch gesehen nur mit 6 fps fortschreitet und nicht mit 60 fps.
Ich möchte die Schlange in jeder Spielschleife bewegen . Aber leider geht die Schlange viel zu schnell, weil sie sich mit der Geschwindigkeit ihrer Kopfgröße bewegt. Dies würde bedeuten, dass sich der Kopf in einem viel kleineren Schritt wie (2, 2) in seine Richtung bewegen müsste als in dem, was ich jetzt habe (32, 32). Da ich während der Schulleitung ein paar Wochen lang immer wieder an diesem Spiel gearbeitet habe, denke ich, dass ich mir zu viele Gedanken darüber gemacht habe, wie ich das erreichen kann. Es ist wahrscheinlich eine einfache Lösung, ich verstehe sie einfach nicht.
Hier ist ein Pseudocode für das, was ich ausprobiert habe, basierend auf dem, was für mich sinnvoll ist. Ich kann mir keinen anderen Weg vorstellen.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Dies erzeugt ungefähr so etwas: Code in Action . Wie Sie sehen können, bleibt jeder Teil immer hinter dem Kopf und macht keinen "Trail" -Effekt.
Ein perfektes Beispiel dafür, was ich vorhabe, finden Sie hier: Datenwurm . Nicht die Drehung des Ansichtsfensters, sondern der Nachlaufeffekt der Dreiecke.
Vielen Dank für jede Hilfe!