Ich versuche, ein Blätterniveau zu einem Testspiel zu machen, das ich als eine Lernübung tue. Ich habe eine Karte mit vielen Fliesen erstellt, die nach ihrer Position in einem Array gezeichnet werden. Ich möchte grundsätzlich, dass die Kamera die Ebene nach unten rollt, aber im Moment schüttelt sie sich nur ein bißchen auf und ab. Ich habe eine Kamera-Klasse, die nur eine leere statische Klasse mit einem statischen Vektor2 für den Standort der Kamera ist. Es ist nur so eingestellt, wie 50, 50 als alle Fliesen sind 50 von 50. Dann in meiner Karten-Update-Methode habe ich die folgenden: Die 300 und 18 sind die Gesamtzahl der Fliesen und die Anzahl der Fliesen auf dem Bildschirm (vertikal). Ich bin völlig verloren, so würde jede Hilfe oder Beratung zu schätzen wissen. Positionierung und Bewegung auf ein Ziel in XNA (2D) In diesem Tutorial werde ich behandeln, wie etwas zu machen und auf ein Ziel zu bewegen. Dies ist nützlich, wenn Sie Raketen, Lenkung Zombies in Richtung Ihres Spielers, zeigt ein Auto in die Richtung youre fahren oder eine Pistole auf ein Ziel, etc, etc. (Sie erhalten die Idee). Was wir behandeln Was Vektoren sind Wie man die Richtung von einem Punkt zu anderen bekommt Wie man allmählich zu einem bestimmten Ziel bewegt Wie man ein Texture2D in die richtige Richtung zeigt Wie man ein Rotationszentrum für Ihre Bilder wählt Was sind Vektoren Imagine youve found a Schatzkarte, die so etwas wie dieses aussieht: Diese Karte weist Sie an, um südlich 4 Meilen, westlich 3 Meilen und südlich 2 Meilen againquot zu folgen. Die Anweisungen bestehen also aus drei Teilen, jeweils mit einer Richtung und einer Distanz. In der Physik ist ein Vektor definiert als160 eine Richtung und eine Kraft (denken Sie an unseren Abstand). So beeinflussten wir grundsätzlich unsere Position mit drei Vektoren. Diese Anleitung führt Sie zu demselben Endpunkt wie die untenstehenden: Aber hier gibt es nur eine Anweisung: quotgo in Richtung Süd-Süd-West, eine Richtung, die Sie 6 Meilen südlich und 3 Meilen westquot führt. In XNA haben wir eine Klasse für die Speicherung von Bewegung in 2 Dimensionen: die Vector2-Klasse. Ein Vector2 speichert die Bewegung horizontal (X) und vertikal (Y), was es auch für die Speicherung der Position von etwas nützlich macht. Wenn Sie in 3D programmieren, können Sie den Vector3 verwenden, der Ihnen eine zusätzliche Dimension (die Z-Achse) gibt. In XNA160 würden die Top-Maps-Anweisungen geschrieben: Beachten Sie, dass die arithmetischen Operatoren quotquot, quot-quot, quotquot, quotquot alle auf Vector2 arbeiten - das ist sehr raffiniert für die Berechnung der resultierenden Kraft auf ein Objekt. Zum Beispiel, wenn drei Kräfte: Schwerkraft, Schub aus Ihren Raketentriebwerken und Meteorkollisionen zu einer glaubwürdigen kombinierten Wirkung auf Ihr vertrauensvolles Raumschiff führen müssen. So erhalten Sie die Richtung von einem Punkt zum anderen Lets Blick auf ein anderes Beispiel in XNA. In der Abbildung unten haben wir zwei Vektor2-Objekte (3,2) und (4,6). Beachten Sie, dass wir in diesem Fall die Vector2-Objekte als Positionen und nicht als Bewegung verwenden. Fühlen Sie sich also frei, sie als zwei Punkte zu visualisieren: 3 Pixel nach rechts und 2 Pixel nach unten von der oberen linken Ecke 4 Pixel nach rechts und 6 Pixel nach unten von der oberen linken Ecke Wenn Sie sich fragen, warum (0,0) ist An der oberen linken Ecke, anstatt der unteren linken, das ist nur, weil das ist die Art und Weise hat es in der Programmierung seit dem Beginn der Computer gewesen. Nun wollen wir herausfinden, was die Richtung vom Schützen zum Ziel ist (jetzt als Vektor, nicht als Bogenmaß). Wenn wir die Richtung (und Entfernung) von einem Objekt zum anderen berechnen wollen, subtrahieren wir die Position des Zielobjekts von der Position des Ziels. Dies gibt uns einen Vektor, der enthält, was wir fehlen, um vom Ziel zum Ziel zu gelangen. Später gut betrachten, wie man dieses in Grad dreht, um das Zielbild korrekt zu zeichnen. In XNA würde dies helfen Ihnen zu erinnern, was zu subtrahieren, was, wenn (wie ich) Sie Schwierigkeiten haben, sich daran zu erinnern, ob die Schützen Position von den Zielen subtrahieren oder umgekehrt, wie ich: denken Sie an ein ganz einfaches Beispiel: Shooter bei ( 1,1), Ziel bei (2,2). (Das heißt, der Schütze sollte nach unten und nach rechts (1,1)) Dann finden Sie die richtige Methode schnell durch Versuch und Irrtum: Shooter minus Ziel. (1,1) - (2,2) (-1, -1) falsch. Weil (-1, -1) oben und links ist, weg vom Ziel Eine andere Möglichkeit, darüber nachzudenken, ist: Wenn Sie etwas von etwas anderem subtrahieren, wird der Teil, den Sie subtrahieren, der neue quotzeroquot, quotreference pointquot oder quotworld centerquot. Es wird der Teil, den Sie vergleichen oder andere Dinge in Bezug auf. Denken Sie an ein Enkelkind (Alter 7) und ihren Großvater (Alter 67). (7) vom Großvater (67) erzählt, wieviel älter der Großvater mit dem Enkelkind verglichen wird: 67 - 7 60. Wenn man den Großvater (67) vom Enkel (7) subtrahiert, erzählt man, wie viel jünger das Enkelkind ist Verglichen mit dem Großvater: 7 - 67 - 60. Wenn du etwas anvisierst - du möchtest, dass die Ziele in der Relation (im Vergleich zu) dem Shooter liegen - also ziehst du den Shooter vom Ziel ab (sowieso - es macht Sinn für mich). Wie man sich schrittweise auf ein bestimmtes Ziel zubewegt: Richtung ohne Distanz erreichen Wir brauchen noch einen Schritt, bevor wir den Unterschied zwischen der aktuellen Position und unserem Ziel für Schuss oder Bewegung nutzen können. Wenn wir die berechnete Differenz als die Bewegung für einen bulletcarstumpy dwarfcrusty orc in unserer Games Update () - Methode verwendeten, würde das bewegte Objekt sofort am Ziel ankommen. In diesem Codebeispiel stellen wir uns vor, wir haben zwei Vector2s, die die Position des Spielers und einen Orc speichern. Wir wollen, dass der Orc unseren Spieler verfolgt. Hier ist, wie man es NICHT tut Das Ergebnis ist, dass wir die Orcs Position auf unsere Spieler Position in einem Augenblick: Was wir tun wollen, zu tun Was wir wollen, ist, sich allmählich zu bewegen, so wollen wir nur einen Teil der Distanz zu bewegen. Sondern in die richtige Richtung. Um nur die Richtung eines Vektors zu erhalten, normalisierst du ihn, was zu einem sogenannten quadratischen Vektorquot (einem Vektor mit einer Länge von 1) führt. Dies bedeutet, dass Sie die Beziehung zwischen den Y und X intakt haben, aber wenn Sie den Vektor für die Bewegung verwenden, bewegen Sie nur 1 Einheit von welcher Skala Ihre Welt ist in. Hier sehen Sie unseren Original-Vektor und die normalisierte Version Hier ist der Code für Normalisierung eines Vektors in XNA: Bewegen mit einer bestimmten Geschwindigkeit Wenn Sie den Einheitsvektor haben, können Sie voran gehen und multiplizieren Sie Ihre Geschwindigkeit auf diesen Vektor. Dies wird Ihnen einen Vektor mit der Länge, die Sie für eine bestimmte Geschwindigkeit benötigen. Dann können Sie den resultierenden Vektor zu dem hinzufügen, was Sie verschieben möchten: So zeigen Sie ein Texture2D in die richtige Richtung an Jetzt, da wir wissen, wie ein Einheitsvektor auf ein bestimmtes Ziel gerichtet wird, können wir es verwenden, um ein Bild zu zeichnen, das darauf hinweist Ziel. Berechnen die Richtung im Bogenmaß das Bild mit einer der vielen überladenen SpriteBatch. Draw () - Methoden, die eine Drehung enthalten. Aber bevor wir das tun können, müssen wir wissen, wie ein Vector2 zu XNA-Radian zu konvertieren. Wie unterscheiden sich die XNA-Radianer von denen, die Sie in der Geometrie gehört haben Aus irgendeinem Grund haben Sie in XNA gewählt, mit einem anderen System von Winkeln zu gehen, als was Sie sich aus der Geometrie merken können. In XNA Null Grad Radian ist UP - traditionell ist es RIGHT. In XNA gehen Sie CLOCKWISE als der Winkel größer wird - traditionell gehen Sie COUNTER-CLOCKWISE. Was bedeutet dies für Sie als Spielprogrammierer Aufenthalt im traditionellen Koordinatensystem für alle Berechnung der Rotation und Bewegung für Einheiten, etc. Dann direkt bevor Sie die Textur zeichnen, konvertieren Sie die Rotation in das XNA-Koordinatensystem. So, jetzt weißt du, dass, heres den Code: Wie konvertiert man eine Vector2 zu Xna radian, für das Zeichnen einer Textur Wie konvertiert man euklidischen Radian zu XNA radian für das Zeichnen einer Textur Um Ihnen ein Beispiel für die Verwendung dieser in einem Spiel - Ive Machte eine kleine Demo zum Steuern eines Pfeils zum Mauszeiger: Beispielprojekt - Steuerung zum Mauscursor Hier ist ein kleines Video, das den Inhalt des Beispielprojekts zeigt. Rotation und Bewegung zu einem Vector2 Hier ist der Kern des Codes aus der Probe. Am oberen Rand des Codes sehen Sie die Variablen, die ich benötige, um Informationen über den Pfeil und die Maus zu speichern. In der Methode Update () können Sie sehen, wie ich die Rotation des Bildes mit der Vector2ToRadian Methode oben berechnen. Zeichnung des Bildes Für eine einfache Zeichnung mit der korrekten Drehung in Ihrem Spiel ist es notwendig, das Bild, das Sie verwenden möchten, nach oben zu verwenden, da dies 0 Grad radian in XNA ist, wie Sie oben im Kapitel "Wie unterscheiden sich die XNA-Radiant Die Sie in geometryquot gehört haben. Also, wenn Sie eine Rakete, jemanden zu jagen oder ein Zombie, jemanden zu stellen - suchen oder erstellen Sie ein Bild, wo es nach oben Wie dies: Hier ist die Draw () - Methode aus der Beispielanwendung. Die drei wichtigsten Parameter, die hier zu verstehen sind, sind die Pfeilsposition - wo der Pfeil den PfeilRotationInRadians gezeichnet werden soll - das ist die Rotation (im XNA-Bogenmaß) des Bildes Vector2.One 64 - das ist das gleiche wie ein neuer Vector2 (64, 64), die ein wenig mehr Erklärung benötigt: So wählen Sie ein Rotationszentrum für Ihre Bilder aus Wenn Sie die SpriteBatch. Draw () Methode verwenden, mit der Sie die Texture2D Youre-Zeichnung drehen können, müssen Sie auch den Punkt übergeben Sie drehen sich um. Standardmäßig handelt es sich hierbei um die obere linke Ecke des Bildes, die Ihnen selten das anbietet, was Sie wollen. Hier können Sie sehen, wie die Drehung um verschiedene Positionen auf einer Textur gibt verschiedene Ergebnisse: (Klicken Sie auf das Bild für größere Version) So können Sie Ihre Bilder drehen um jede Position (auch außerhalb der Texture2D) - nifty Ich hoffe, Sie genossen das Tutorial, wenn Sie Haben Ideen für die Verbesserung es - bitte schreiben Sie mir bei quotkr at rup dot dkquot Dieser Eintrag wurde am Freitag, Dezember 28th, 2012 um 20:27 und ist abgelegt unter Uncategorized. Sie können alle Antworten auf diesen Eintrag durch den RSS 2.0 Feed verfolgen. Sie können eine Antwort hinterlassen. Oder trackback von Ihrer eigenen Seite. 4 Responses to 8220Pointing und auf ein Ziel in XNA (2D) 8221 Danke, sehr schön erklärt, auch die Vektor-Subtraktion. Nochmals vielen Dank Great lesen Eine Frage, sagen, wenn ich allmählich verschieben wollen ein Objekt von einer Position zur anderen und dann aufhören, wenn das Objekt sein Ziel erreicht. Da wir den Vektor mit einem Schwimmer multiplizieren wir werden wirklich, wirklich nah, aber niemals nur auf das genaue Ziel zu bekommen. Im Umzug auf 64,30, Ill zu etwa 63,999992, 29,999991 Was ist ein Standard-Weg, um dieses Problem zu lösen RoundingClamping. Was ich normalerweise tun, ist die Entfernung zum Ziel für jedes Update zu überprüfen. Wenn der Abstand kleiner als ein Schwellenwert Ive ausgewählt ist (z. B. 2 Pixel oder Einheiten, wenn Sie), verschiebe ich das bewegte Objekt auf dem Ziel und beenden zu bewegen. Würde das für Sie arbeiten Mit freundlichen Grüßen - Jakob Ja, das ist genau der Ansatz, den ich ging, denn ich bekomme die Länge des Distanzvektors und überprüfe, ob die Länge kleiner als die angegebene Geschwindigkeit ist. Wenn die Länge kleiner als Geschwindigkeit ist, setze ich den Zielvektor zurück. Vielen Dank Jakob Heres die Methode Im mit im Fall, dass jemand anderes passiert, um in diesem Problem laufen (beachten Sie, gibt es Probleme mit dieser Methode, wenn Sie das Ziel überschreiten) public static Vector2 Move (diese Vector2 Position, Vector2 Ziel, Position wenn (dist. LengthSquared () lt Geschwindigkeit) Rückkehr Ziel Rückkehr Position dist Geschwindigkeit Lassen Sie eine Antwort The Wizard - Teil 1 Making a Sprite bewegen sich auf dem Bildschirm Dies ist die erste in einer vierteiligen Serie, um Ihnen zu zeigen, wie man etwas Bewegung und Aktion hinzufügen Zu Ihrem Sprite. Dieser erste Teil wird über die Grundlagen des Erhaltens Tastatur-Eingabe von dem Spieler gehen und es verwenden, um die Sprite bewegen um den Bildschirm. Erstellen des neuen Spielprojekts: Wir verwenden die quotSpritequot-Klasse, die wir im Tutorial erstellt haben. Erstellen eines 2D-Sprites. Anstatt ein neues XNA Game-Projekt zu erstellen, können Sie einfach die Quelle für dieses Projekt herunterladen und mit dem Spielen beginnen. Wenn Sie lieber ein neues Spiel-Projekt zu beginnen, aber haben Schwierigkeiten, daran zu erinnern, wie Sie das tun, folgen Sie einfach den Schritten in diesem Tutorial hier und kommen zurück zu diesem Tutorial, nachdem Sie Ihr Gedächtnis aufgefrischt haben. Sobald Sie Ihr neues Spielprojekt haben, müssen Sie die in diesem Tutorial erstellte quotSpritequot-Klasse zu Ihrem neuen Projekt hinzufügen. Nun können wir das neue Sprite-Bild hinzufügen, das wir in diesem Tutorial zum Spielprojekt verwenden werden. Sie können das im Projekt verwendete Wizard-Image von hier herunterladen. Sobald Sie das Bild heruntergeladen haben, fügen Sie das neue Assistentbild in den Inhaltsordner in Ihrem Spiel ein. Wenn Sie Schwierigkeiten haben, sich daran zu erinnern, wie Sie ein Bild zu einem XNA Game-Projekt hinzufügen, folgen Sie einfach den Schritten in diesem Tutorial und kehren Sie zu diesem Tutorial zurück, nachdem Sie Ihr Gedächtnis aktualisiert haben. Erweiterung der Sprite-Klasse: Um zu beginnen, werden wir einige Verbesserungen an der Sprite-Klasse vornehmen. Diese Verbesserungen wurden in der quotAdvanced Scrolling ein 2D-Hintergrund-Projekt, aber wir werden über sie jetzt gehen. Beginnen Sie zunächst mit dem Hinzufügen der folgenden Objekte an der Spitze der Sprite-Klasse. Der AssetName ist ein öffentliches Objekt, das verwendet wird, um den Namen des Bildes zu speichern, das von der Content Pipeline für dieses Sprite geladen werden soll. Größe ist ein öffentliches Objekt, das verwendet wird, um die aktuelle Größe des Sprites anzugeben, nachdem die Skalierung angewendet wurde. MScale ist ein privates Objekt, das der Draw-Methode mitteilen wird, wie viel das Sprite aus seiner ursprünglichen Größe verkleinert oder vergrößert. Als nächstes würde eine Eigenschaft zur Klasse hinzufügen. Eigenschaften werden oft verwendet, wenn Sie einige andere Dinge zu tun haben, wenn der Wert eines Objekts ändert. In unserem Fall, wenn die Skala des Sprites geändert wird, müssen wir die Größe des Sprites neu berechnen, mit der neuen angewendeten Skala. Fügen Sie der Sprite-Klasse die folgende Eigenschaft hinzu. Die LoctContent-Methode der Sprite-Klasse muss ebenfalls verbessert werden. Ändern Sie die LoadContent-Methode der Sprite-Klasse wie folgt aussehen. Wir haben die Speicherung des Assetnamens und die anfängliche Berechnung der Sprites-Größe hinzugefügt. Unsere Sprites müssen sich bewegen können, also werden wir der Klasse eine neue quotUpdatequot-Methode hinzufügen, um uns dabei zu helfen. Fügen Sie der Sprite-Klasse die folgende neue Update-Methode hinzu. Die Bewegung ist eine einfache Berechnung, in welcher Richtung sich der Sprite bewegt, die Geschwindigkeit, in die er sich bewegen sollte, und multipliziert diese mit der Zeit, die verstrichen ist, und dann die ursprüngliche Position mit diesem Ergebnis anpasst. TheDirection ist ein Vektor2-Objekt. Ein Wert von -1 im X-Wert des Vector2 zeigt an, dass etwas nach links verschoben werden sollte. Ein Wert von 0 gibt an, dass er sich nicht entlang der X-Achse bewegt. Und ein Wert von 1 zeigt an, dass sich das Sprite nach rechts bewegen sollte. Das gleiche gilt für den Y-Wert des Vector2. Ein -1 bedeutet, dass das Sprite nach oben, 0 nicht in die Y-Richtung bewegt und 1 bedeutet, dass es sich nach unten bewegt. Kombinationen von X-, Y-Werten bewirken, dass sich der Sprite entlang der X-, Y-Achse bewegt. TheSpeed ist, wie schnell sich der Sprite entlang einer bestimmten Achse bewegen sollte. Wert von 0 bedeutet, dass es keine Geschwindigkeit entlang dieser Achse hat, höhere Geschwindigkeiten machen das Sprite bewegen sich schneller entlang der angegebenen Achse. TheGameTime wird verwendet, um zu halten, wie schnell das Sprite konsistent auf verschiedenen Computern bewegt. Wenn sich die Geschwindigkeit des Bildschirms immer schneller verkürzt, sollte sich das Sprite immer noch so bewegen, wie es auf einem Computer mit einer langsameren Bildwiederholfrequenz der Fall ist. Mit unserem sprite erfolgreich wechselnde Position, jetzt seine Zeit, um es auf dem Bildschirm in dieser neuen Position und mit seiner potenziell neuen Skala zu ziehen. Ändern Sie die Draw-Methode der Sprite-Klasse wie folgt aussehen. Das SpriteBatch-Objekt hat mehrere verschiedene Overrides für Draw (Overrides sind die gleiche Methode, aber sie nehmen zusätzliche Parameter, um neue Funktionalität zu geben). In diesem Fall wollten wir die Größe des Sprites nach Maßstab von Skale nach oben oder unten umrechnen, so dass wir die Standardwerte für alle anderen Parameter dieses bestimmten Overrides verwenden. Irgendwann in der Zukunft könnten wir sie verwenden, aber für jetzt, wir wollen einfach nur Position und Skala der Sprite. Das ist es für die Änderungen an der Sprite-Klasse für jetzt. Machen Sie eine schnelle Build Build jetzt, um sicherzustellen, dass alle Änderungen korrekt kompilieren. Nichts wird im Spiel noch unterschiedlich sein, aber sein gutes, um sicherzustellen, dass Sie keine Fehler haben, bevor Sie zu viel weiter erhalten. Hinzufügen der Wizard-Klasse: Wäre ein Wizard-Zeichen auf dem Bildschirm verschoben (Sie haben das Bild für den Assistenten dem Projekt zuvor hinzugefügt). Der Zauberer wird ein Sprite sein, aber hes gehen, um einige zusätzliche Funktionalität besonders zu ihm außerdem zu haben. Um dies zu tun, würden wir eine neue Klasse namens quotWizardquot erstellen und dann von der Sprite-Klasse erben. Inheriting gibt Ihnen die Funktionalität der anderen Klasse und ermöglicht Ihnen, diese Funktionalität hinzuzufügen. Es ist die Basis der objektorientierten Programmierung. Klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer. Wählen Sie AddAddquot aus, und wählen Sie quotClassquot aus den Add Submenschen. Daraufhin wird das Dialogfeld Add Add New Itemquot geöffnet. Geben Sie den Namen quotWizardquot für Ihre Klasse ein, und klicken Sie auf die Schaltfläche AddAddquot. Jetzt müssen wir anfangen, der Wizard-Klasse einige Funktionen hinzuzufügen. Beginnen wir mit dem Hinzufügen unserer XNA-Framework-Quotierungsquot-Anweisungen zum Anfang der Wizard-Klassendatei. Fügen Sie die folgenden quotusingquot-Anweisungen hinzu. Diese nur helfen, mit der Lesbarkeit unseres Codes, so dass wir nicht so viel eingeben, um auf das Objekt, das uns durch das XNA Framework zur Verfügung gestellt bekommen. Beispielsweise können wir Vector2 verwenden, anstatt jedes Mal, wenn wir dieses Objekt verwenden möchten, Microsoft. Xna. Framework. Vector2 einzugeben. Es ist nun Zeit, anzugeben, dass wir von der Sprite-Klasse erben wollen. Ändern Sie die Klassendeklaration für den Assistent wie folgt aussehen. Die Klasse Wizard erbt jetzt von der Sprite-Klasse und hat Zugriff auf alle ihre öffentlichen und geschützten Mitglieder und Methoden. Wurden Gong zu verwenden einige Werte in der Klasse immer und immer wieder, die nicht ändern. So wollten wir diese Konstanten unserer Klasse machen. Es ist eine gute Programmierpraxis, um in die Gewohnheit, entfernen Sie quotmagicquot Zahlen und Zeichenfolgen aus Ihrem Code und verschieben sie in Variablen und Konstanten. Eine magische Zahl oder String ist eine beliebige Zahl, die nur magisch in Ihrem Code ohne wirkliche Erklärung dessen, was der Wert ist oder warum sein, dass Wert. Fügen Sie die folgenden Konstanten an der Spitze der Wizard-Klasse hinzu. Jetzt können wir einige weitere Objekte der Klasse hinzufügen, die uns helfen, uns die Funktionalität, die wir brauchen, um unsere Wizard-Sprite zu bewegen. Fügen Sie die folgenden Objekte an dem Anfang der Assistentenklasse hinzu. Die State Enum wird verwendet, um den aktuellen quotStatequot des Sprites zu speichern. Was ist Zustand Sie können Staat als jede Art von Aktion, die Sie benötigen, um Spur zu halten für Sie Sprite, weil es eine andere Aktion oder quotstatequot begrenzen könnte denken. Also, wenn das Sprite tot war, oder powered up oder Springen oder Ducking, etc. Die könnten alle quotstatesquot Ihr Assistent werden könnte und Sie könnten überprüfen, um zu sehen, wenn der Assistent war in (oder nicht in) einen aktuellen Zustand vor Ihnen Etwas tun oder etwas auf den Bildschirm ziehen. Derzeit hat unser Wizard nur einen Zustand, quotWalkingquot. MCurrentState wird verwendet, um den aktuellen Zustand des Sprites und seinen Satz auf quotWalkingquot zu verfolgen, wenn es erstellt wurde. MDirection wird verwendet, um die Richtung zu speichern, in die sich der Assistent bewegt, und mSpeed wird verwendet, um die Geschwindigkeit zu speichern, die der Sprite in diesen Richtungen bewegt. MPreviousKeyboardState wird verwendet, um den vorherigen Zustand zu speichern, den die Tastatur beim letzten Mal überprüft hatte. Dies ist nützlich für Zeiten, wenn wir nicht eine Aktion wiederholen möchten, es sei denn, ein Spieler hat eine Taste auf der Tastatur erneut gedrückt, anstatt es einfach zu halten. Mit dem Wissen des vorherigen Zustandes der Tastatur können wir überprüfen, ob der Schlüssel vorher freigegeben wurde, aber jetzt gedrückt wird und dann alles tun, was wir für diesen Schlüssel tun müssen. Der Assistent muss das neue Wizard-Image laden, also nach der Basis-Sprite-Klasse modellieren und dem Wizard eine LoadContent-Methode hinzufügen. Fügen Sie der Klasse Wizard die folgende LoadContent-Methode hinzu. Die LoadContent-Methode für die Wizard-Klasse nimmt nicht in einem Asset-Namen wie die Sprite-Klasse. Das liegt daran, dass die Assistentenklasse bereits weiß, welches Asset geladen werden muss. Zuerst stellt es die Ausgangsposition des Assistenten ein (unter Verwendung der Konstanten, die wir für die Start-x - und y-Position deklariert haben) und ruft dann die quotLoadContentquot-Methode der Basis-Sprite-Klasse auf, von der sie erbt. Es geht in die Basis LoadContent-Methode der Content-Manager, in dem es empfangen, wenn seine LoadContent-Methode aufgerufen wurde und dann die Konstante, die wir für den Asset-Namen deklariert. Die quotLoadContentquot-Methode der Sprite-Klasse wird nun ausgeführt und den gesamten Code ausführen. Nun müssen wir der Wizard-Klasse eine quotUpdatequot-Methode hinzufügen. Diese Methode kümmert sich um die Überprüfung für Eingabe und Verschieben der Sprite herum. Fügen Sie der Wizard-Klasse die folgende Update-Methode hinzu. Die Aktualisierungsmethode erhält zuerst den aktuellen Zustand der Tastatur. Dies ist in Funktionalität des XNA-Framework eingebaut und durch Aufruf quotKeyboard. GetState () quot, berichtet das XNA-Framework Sie alle Tasten, die gedrückt und nicht auf der Tastatur gedrückt werden. Als Nächstes nennen wir eine Methode quotUpdateMovementquot, die im aktuellen Tastaturzustand weitergeleitet wird. Wir haben diese Methode noch nicht geschrieben, aber wir werden in Kürze. Dann speichern wir den Zustand der Tastatur in unserem mPreviousKeyboardState-Objekt. Dies wird uns helfen, wenn wir auf den Punkt, dass wir überprüfen müssen, dass ein Schlüssel wurde nicht freigegeben und dann erneut gedrückt zu bekommen. Wir werden nicht mit dieser Funktionalität für dieses Tutorial, aber seine eine gute Angewohnheit zu bekommen, um sicherzustellen, dass seine zur Verfügung, wenn die Überprüfung der Tastatureingabe, weil youre gebunden, um diese Informationen schließlich benötigen. Schließlich rufen wir die Update-Methode der Sprite-Klasse an, von der wir erben. Wir übergeben die verstrichene Zeit und die aktuellen Werte für die Geschwindigkeit und Richtung des Assistenten. Die Aktualisierungsmethode der Sprite-Klasse wird dann diese Werte verwenden, um die Position des Sprites anzupassen. Das ist es für die Update-Methode, aber in ihm nannten wir eine quotUpdateMovementquot-Methode, die es nicht gab. Lets Go ahead und fügen Sie diese Methode jetzt. Diese Methode behandelt alle Prüfungen, um festzustellen, ob eine der Bewegungstasten gedrückt wurde, und legen dann die Bewegungsvariablen für das Sprite fest). Fügen Sie der Klasse Wizard die folgende quotUpdateMovementquot-Methode hinzu. Die UpdateMovement-Methode ist die Schlüsselmethode, um unseren Wizard-Sprite zu bewegen. Zuerst wird geprüft, ob der Wizard im aktuellen Zustand für Walking ist. Unser Assistent kann derzeit nur in einem Walking-Zustand sein, aber es könnte mal in der Zukunft sein, wenn wir ihn nicht umziehen wollen, wenn er nicht gerade in einem Walking-Zustand ist, so dass wir überprüfen. Als nächstes setzen wir seine Richtung und Geschwindigkeit. Vector2.Zero ist eine schnelle und einfache Art zu sagen, erstellen Sie eine neue Vector2 (0,0). Jetzt fangen wir an zu sehen, welche Tasten gedrückt werden. Zuerst prüfen wir, ob die Pfeiltaste nach links oder die rechte Pfeiltaste gedrückt wird. Wenn sie sind, setzen wir die Geschwindigkeit entlang der X-Achse und geben die Richtung an. Dann prüfen wir, ob der Pfeil nach oben oder der Pfeil nach unten gedrückt wird. Und wieder, wenn sie sind, setzen wir die Geschwindigkeit entlang der Y-Achse und geben die Richtung an. Wenn nun das base. Update der Sprite-Klasse aufgerufen wird (was in unserer Update-Methode bereits geschieht), werden die neuen Werte für unsere Wizard-Geschwindigkeit und - Richtung übergeben und unser Wizard-Sprite entsprechend verschoben. Machen Sie eine schnelle Build, um sicherzustellen, dass die Wizard-Klasse korrekt kompiliert, ohne Fehler. Sie werden nicht sehen, den Assistenten auf dem Bildschirm noch (wenn youre Gebäude dies aus dem quotCreating ein 2D Spritequot Projekt sollten Sie nur noch sehen, die Sprites auf den Bildschirm gezogen und Sie werden nicht in der Lage, sie zu bewegen. So haben wir noch einige letzte Änderungen zu machen Müssen Sie die Game1.cs-Klasse ändern, um unsere neue Wizard-Klasse anstelle der Sprite-Klasse zu verwenden Ändern der Game1.cs-Klasse: Wir möchten Referenzen auf die Verwendung der Sprite-Klasse entfernen und stattdessen unsere Wizard-Klasse verwenden Die einen Code löschen und dann einen neuen Code hinzufügen, um ihn zu ersetzen. Löschen Sie die folgenden Codezeilen aus dem Anfang der Game1.cs-Klasse Fügen Sie jetzt die folgende Codezeile an den Anfang der Game1.cs-Klasse. Ändern Sie nun die Initialize-Methode, um wie folgt aussehen zu können: Dies erzeugt eine neue Instanz unseres Wizard-Sprites (und wir haben die alten Codezeilen entfernt, die neue Instanzen der Sprite-Klasse erstellt haben) Des Assistenten Ändern Sie die LoadContent-Methode der Klasse Game1.cs wie folgt aussehen. Mit unserem Wizard-Sprite-Inhalt geladen, können wir in der Fähigkeit für die Game1.cs-Klasse zu quotUpdatequot der Assistent hinzufügen. Ändern Sie die Update-Methode wie folgt aussehen. Schließlich wollen wir unseren Assistenten zeichnen. Ändern Sie die Draw-Methode der Klasse Game1.cs wie folgt aussehen. Nachdem wir die Game1.cs-Klasse entsprechend angepasst haben, um unsere neue Wizard-Klasse zu verwenden, führen Sie einen Build durch und sehen Sie Ihre Ergebnisse. Der Assistent sollte nun auf den Bildschirm gezogen werden, und Sie sollten ihn mit den Pfeiltasten nach oben, unten, nach links und nach rechts bewegen können. Glückwünsche Sie haben erfolgreich herausgefunden, wie man ein Sprite bewegen um den Bildschirm in dir Spiel. Könnt ihr euch ein paar Dinge vorstellen, die ihr ändern könnt, könnt ihr die alten Sprites wieder einfügen und sie auf den Bildschirm ziehen. Was würdet ihr tun, wenn ihr versucht, zwei Assistenten zum Spiel hinzuzufügen, zu experimentieren und Fragen zu stellen? Vor allem sicherstellen, dass yoursquore Spaß hat
Cara Membaca Indikator Handels ZIGZAG, SUPER SIGNAL Dan STOCHASTIC Pada MT4 Kunci Forex - Apa yang kita lakukan jika tidak terjadi Moment Kreuz MA sama sekali Pada saat itu. Tenang karen masih bisa menggunakan perpaduan Indikator lainnya yakni Indikator ZIGZAG, SUPERSIGNAL dan STOCHASTIC. Setelah kita belajar bagaimana Cara Membaca Indikator Trading Verschieben Verschieben Pada MT4 pada artikel sebelumnya. Perhatikan gambar dibawah ini Secara seksama: Jika Telah Muncul Supersignal (anak Panah ke atas) dan Zick-Zack-Telah mengarah Dari ATAS ke bawah, dan stochastischen Telah berada di bawah garis 20 nya, maka tunggulah stochastischen bergerak di atas garis 20 dan K (Titik-Titik Merah) menghadap ke ATAS diatas garis 20 maka unda melakukan bestellen BUY. Jika Telah Muncul Supersignal (anak Panah ke bawah) dan Zick-Zack-Telah mengarah Dari bawah ke ATAS, dan stochastischen Telah berada di atas garis 80 nya, maka tunggulah stochastischen bergerak ke arah di bawah garis 80 dan K (Titik-Titik...
Comments
Post a Comment