Hey, ich bin ein Neuling in dieser Programmierlerche und es ist wirklich frustrierend für mich. Ich versuche, eine Schlange in alle Richtungen zu bewegen, während ich Klassen benutze. Ich habe einen Vektor2 für Geschwindigkeit erstellt und versucht, eine Methode zu erstellen, die die Schlange innerhalb der Schlangenklasse bewegt.
Jetzt bin ich verwirrt und nicht sicher, was ich als nächstes tun soll.
Schätzen Sie jede Hilfe. Danke: D
Dies ist, was ich in Bezug auf die Methode getan habe ...
public Vector2 direction()
{
Vector2 inputDirection = Vector2.Zero;
if (Keyboard.GetState().IsKeyDown(Keys.Left)) inputDirection.X -= -1;
if (Keyboard.GetState().IsKeyDown(Keys.Right)) inputDirection.X += 1;
if (Keyboard.GetState().IsKeyDown(Keys.Up)) inputDirection.Y -= -1;
if (Keyboard.GetState().IsKeyDown(Keys.Down)) inputDirection.Y += 1;
return inputDirection * snakeSpeed;
}
Schätzen Sie jede Hilfe. Danke: D
EDIT:
Nun, lassen Sie mich alles klarstellen. Ich mache ein kleines Grundspiel für eine Aufgabe. Das Spiel ähnelt dem alten Schlangenspiel auf den alten Nokia-Handys. Ich habe eine Schlangenklasse erstellt (obwohl ich nicht sicher bin, ob dies erforderlich ist, da ich nur ein sich bewegendes Sprite im Spiel haben werde). Nachdem ich den obigen Code (in der Schlangenklasse) geschrieben hatte, lief das Spiel ohne Fehler, aber ich konnte das Bild nicht wirklich verschieben :(
EDIT2: Vielen Dank für alle Antworten!
Antworten:
Obwohl ich auch ein Neuling in der Spieleentwicklung bin, würde ich wetten, dass Sie Ihre
inputDirection
Variable immer neu initialisierenVector2.Zero
.Ich weiß nicht viel über Spieleentwicklung, aber was die objektorientierte Programmierung betrifft, ist das eine andere Sache! Hier ist, was ich mitgekommen bin, nachdem ich Ihren Kommentar über Klassen gelesen habe.
Ich hoffe, das hilft und auf dem richtigen Weg zu einer tragfähigen Lösung zu sein! =)
quelle
Snake
Klasse, die sich ihrer Geschwindigkeit und Richtung bewusst sein sollte. Abgesehen davon ist dies das Spiel, das die Benutzereingaben erhält. Also, in meinem Verständnis, müssen Sie die Schlange Know machen welche Richtung es beim nächsten Kopf soll, das ist, glaube ich , dass Sie in Ihrem haben, solltenSnake
Klasse, vier Methoden:MoveDown()
,MoveLeft()
,MoveRight()
undMoveUp()
. Es ist die Schlange, die weiß, was zu tun ist, um sich in die eine oder andere Richtung zu bewegen, und da sie auch ihre Geschwindigkeit kennt, soll sie sich entsprechend bewegen.Game
Instanziieren Sie dann in Ihrer Klasse Ihre Schlange und geben Sie die Anweisungen durch ihre Methoden ein!Snake
Klasse aufgenommen habe, die vierMove
Methoden offenlegt . Die Schlange muss nicht wissen, welche Taste gedrückt wurde, sondern Ihr Spiel erhält die Tasten. Dann ist es Ihr Spiel, das Ihrer Schlange sagt, wohin sie gehen soll, abhängig von den Tasten, die der Spieler gedrückt hat. Dann Ihr Spiel erzählt eine_snake
InstanzMoveLeft
,MoveDown
usw. abhängig von den Tasten , die Sie gedrückt. Lassen Sie mich wissen, ob das hilft! Und zögern Sie nicht, Kommentare zu Dingen abzugeben, bei denen Sie nicht arbeiten oder so. Ich werde Ihnen gerne helfen, so gut ich kann.Ich verwende Code wie diesen, um meine Sprites zu verschieben. Er funktioniert in der Regel recht gut für mich. Außerdem wird "GameTime" verwendet, um sicherzustellen, dass die Bewegung über die Frameraten hinweg konsistent ist.
Offensichtlich möchten Sie dem Sprite während des Aktualisierungsprozesses möglicherweise mehr Parameter zur Verfügung stellen, sodass Sie möglicherweise auch die Geschwindigkeit oder andere Faktoren berücksichtigen.
quelle
Diese Frage braucht mehr Lambdas.
Beachten Sie, dass dies aus einem WIP stammt, sodass einige nicht verwendete und implizierte, aber nicht implementierte Funktionen vorhanden sind. Wo Sie das sehen,
() =>
fügen Sie Ihre hinzuinputDirection.X -= -1;
. Mir ist klar, dass dies für ein Gamepad gilt und Sie eine Tastatur verwenden, aber das Gruppierungsprinzip oder zumindest der Begriff der Aktionskarte gilt weiterhin.Das ist wahrscheinlich übertrieben, macht aber viel Spaß!
Setup-Funktion, die die Steuerelemente abbildet:
Die Spielkomponente, mit der es funktioniert (1 pro Spieler instanziieren):
quelle
Bedeutet dies, dass Ihr Code nicht das tut, was Sie denken, dass er tun sollte, oder haben Sie eine Funktion, die Sie implementieren müssen, die Sie nicht wissen, wie oder möchten Sie Ratschläge, welche Funktion als nächstes implementiert werden soll?
So oder so...
Sie möchten kein Negativ für eine Richtung subtrahieren und kein Positiv in der anderen Richtung hinzufügen. Diese beiden bewerten dasselbe.
quelle
So mache ich das in einem meiner Spiele unter Windows Phone. Denken Sie daran, dass ich zum Beispiel einige Vereinfachungen vorgenommen habe. In meinem Spiel folgen Feinde einer Reihe von Wegpunkten entlang eines Pfades.
Bei der
Update
Methode in meinerEnemy.cs
Klasse bewerte ichEnemy.Waypoints.Peek() - Enemy.Position
(normalisiert), um zu bestimmen, in welche Richtung sich der Feind bewegen soll.Dann berechne ich die Geschwindigkeit (Richtung + Geschwindigkeit) für den aktuellen Frame anhand der Richtung.
Schließlich passe ich die tatsächliche Position des Feindes an.
Es hilft, die Mathematik zu verstehen, aber so können Sie ein Objekt bewegen.
quelle