Im vorigen Artikel dieser Serie haben wir viel Zeit damit verbracht, unser Spiel so einzurichten, dass wir alle notwendigen Bilder installiert hatten und zufällig ein Raster von Blöcken für den Spieler erzeugt haben. Mit diesen Systemen werden wir nun an grundlegenden Funktionen arbeiten und dem Spieler die Möglichkeit geben, das Spielfeld zu manipulieren.
Hier ist eine Demo des Spiels, an dem wir in dieser Serie arbeiten:
Wir haben das vorherige Tutorial beendet, nachdem wir für jeden Block eine andere Farbe gewählt hatten. Ich dachte, es wäre gut, von genau dieser Stelle zu greifen und mit einer Animation zu den Blöcken zu beginnen, so dass sich die Bilder ändern, je nachdem, was der Spieler macht oder tut. Die erste Animation, die wir hinzufügen werden, ist ein Mouseover-Ereignis.
Fügen Sie zuerst eine Maus Gegenstand zu Layout 1. Dann gehe zurück zu Veranstaltungsblatt 1 und füge ein neues hinzu Veranstaltung.
Ereignis: Maus> Cursor ist über Objekt Objekt = Blockieren Aktion: Blockieren> Rahmenwert setzen = (Block.Farbe-1) * 3 + 2
Wenn Sie nun in das Spiel einsteigen, sollte sich das Bild für die Blöcke ändern, wenn Sie mit dem Mauszeiger darüber fahren, und sich zurückbewegen, wenn Sie den Cursor weg bewegen.
Wir haben noch ein Animationsereignis:
Ereignis: Block> Ist boolesche Instanzvariable gesetzt Instanzvariable = IsMatched Aktion: Block> Set Frame Value = (Block.Color-1) * 3 + 3
Wir müssen auch sicherstellen, dass sich das Bild nicht ändert, wenn Sie den Mauszeiger über einen übereinstimmenden Block bewegen. Fügen Sie dem Maus-Hover-Ereignis eine weitere Bedingung hinzu:
Bedingung: Invert: Block> Ist eine boolesche Instanzvariable gesetzt Instanzvariable = IsMatched
Das Umkehren bedeutet, dass das Hover-Image nur verwendet wird, wenn der Block nicht Teil einer Übereinstimmung ist. Da wir noch kein übereinstimmendes System haben, sollten Sie keine Änderungen feststellen. Wenn wir jedoch vorankommen, wird dieses Ereignis ins Spiel kommen.
Wenn alle drei Ereignisse vorhanden sind, sollte Ihr Veranstaltungsblatt jetzt so aussehen:
Als nächstes werden wir dem Spieler die Möglichkeit geben, benachbarte Blöcke auszutauschen. Damit dieses System funktioniert, verwenden wir eine Kombination aus Arrays und Funktionen. Wenn Sie sie noch nicht in C2 verwendet haben, lesen Sie das Handbuch, um mehr zu erfahren.
Bevor ich erkläre, wie das System erstellt wird, möchte ich, dass Sie sehen, was wir machen, und kurz erklären, wie es funktioniert. Um zu sehen, wie das System aussehen wird, spielen Sie die folgende Demo. Um Blöcke zu vertauschen, klicken Sie einfach auf eine benachbarte Stelle in eine der vier Himmelsrichtungen.
Klicken Sie hier, um die Demo zu laden.Wenn Sie einen Block ziehen, werden vier farbige Quadrate über den Blöcken angezeigt, die sich direkt daneben befinden. Wenn Sie den Block loslassen, gibt es ein Ereignis, das überprüft, ob der Block eines dieser farbigen Quadrate überlappt.
Wenn der Block eines der farbigen Quadrate überlappt, tauscht er den von Ihnen verschobenen Block mit dem Block aus, auf den das farbige Quadrat gezeichnet wurde, oder positioniert den verschobenen Block einfach an der neuen Position. Wenn Ihr Block eines der farbigen Quadrate nicht überlappt, wird nichts ausgeführt. Es macht auch nichts, wenn der Block mehrere farbige Quadrate überlappt.
Der Grund, warum wir dieses System verwenden, anstatt zu prüfen, ob der Block selbst einen anderen Block überlappt, besteht darin, dass wir keine einfache Möglichkeit haben, zu überprüfen, wo sich die beiden Blöcke relativ zueinander befinden. Indem wir die farbigen Quadrate an den gültigen Standorten neu positionieren und sie als Grundlage für unsere Prüfungen verwenden, haben wir eine viel bessere Vorstellung davon, was der Spieler vorhatte, wenn er einen Tausch versuchte.
Nun, da wir wissen, was passiert, können wir damit beginnen, es umzusetzen. Gehe zu Layout 1 und fügen Sie ein Funktion Objekt und ein Array Objekt. Lassen Sie die Funktion Objektname als Funktion
, aber benenne das um Array zu Blockpositionen
. Das Funktion Objekt wird uns erlauben, zu verwenden Funktionen innerhalb unseres Codes und der Array Damit speichern wir die Positionen der Blöcke, die wir tauschen. Wir müssen auch das einstellen Höhe und Tiefe des Arrays zu 2
.
Wenn Sie das getan haben, erstellen Sie vier neue Sprites, die als farbige Quadrate verwendet werden:
BottomBlock
.LeftBlock
.RightBlock
.TopBlock
.Die Farben spielen keine Rolle, aber die Verwendung dieser Farben macht sie unterschiedlich, so dass sie leicht zu identifizieren sind und es einfacher ist, sie zu verfolgen, da ich das gemacht habe. Diese Sprites sollten außerhalb des Layouts platziert werden, damit der Spieler sie nicht sehen kann.
Sie sollten auch die Größe jedes dieser Elemente auf einstellen 30,30
und gib ihnen jeweils eine Opazität von 0
. In der obigen Demo sind sie jeweils nur geringfügig transparent, weil ich wollte, dass Sie sehen können, was passiert ist, aber im eigentlichen Spiel sollte der Spieler sie überhaupt nicht sehen können.
Wählen Sie schließlich Ihr aktuelles aus Block Objekt und fügen Sie das hinzu Ziehen und loslassen Verhalten dazu.
Nun geh zurück zu Veranstaltungsblatt 1 und ein neues erstellen Veranstaltung mit sechs Aktionen.
Ereignis: Blockieren> Beim DragDrop-Ziehstart Aktion: BlockPositions> Bei XY setzen X = 0 Y = 0 Wert = Block.X Aktion: BlockPositions> Bei XY setzen X = 0 Y = 1 Wert = Block.Y Aktion: BottomBlock> Position festlegen X = Block.XY = Block.Y - (Block.Width + 2) Aktion: TopBlock> Position festlegen X = Block.XY = Block.Y + (Block.Width + 2) Aktion: LeftBlock> Set Position X = Block. X - (Block.Width + 2) Y = Block.Y Aktion: RightBlock> Position setzen X = Block.X + (Block.Width + 2) Y = Block.Y
Dieses Ereignis speichert die Startposition des Blocks, den Sie verschoben haben, und bewegt die farbigen Quadrate so, dass sie sich in der richtigen Position relativ zu dem Block befinden, der verschoben wird.
Ihre Veranstaltung sollte so aussehen:
Beim nächsten Ereignis, das wir hinzufügen werden, wird geprüft, welchen Swap der Spieler versucht.
Erstens wartet das Ereignis darauf, wenn der Spieler den Block, den er bewegt, abwirft. Es führt dann eine Reihe von Überprüfungen durch, um zu sehen, mit welchem farbigen Quadrat der Block kollidiert (falls vorhanden), und entweder den entsprechenden Swap ausführen oder einfach die Position des bewegten Blocks zurücksetzen.
Ereignis: Block> Bei DragDrop-Drop Unterereignis: Block> Überlappt BottomBlock Aktion: BlockPositions> Bei XY setzen X = 1 Y = 0 Wert = BottomBlock.X Aktion: BlockPositions> Bei XY setzen X = 1 Y = 1 Wert = BottomBlock .Y Aktion: Blockieren> Position setzen X = Blockpositionen.At (0,0) Y = Blockpositionen.At (0,1)
So sollte es bisher aussehen:
Genau jetzt die Veranstaltung Nur Konten für Swaps mit der Block unter dem, der bewegt wird. Um die anderen hinzuzufügen, klicken Sie mit der rechten Maustaste auf das Unterereignis und fügen Sie ein hinzu Sonst. Kopieren Sie dann die Bedingung vom ersten Unterereignis in das Else-Ereignis, ändern Sie jedoch das Ziel ab BottomBlock
zu TopBlock
.
Kopieren Sie jetzt die Aktionen vom ursprünglichen Teilereignis in das Else-Ereignis und ändern Sie erneut alle Instanzen von BottomBlock
zu TopBlock
. Tun Sie dies zwei weitere Male mit LeftBlock
und RightBlock
, so dass Sie insgesamt vier Unterereignisse haben und Ihre Ereigniseinrichtung folgendermaßen aussieht:
Zum Schluss noch ein Else-Event hinzufügen:
Unterereignis: Else Action: Block> Set Position X = BlockPositions.At (0,0) Y = BlockPositions.At (0,1)
Von hier aus werden wir die Tauschmechanik selbst implementieren. Um die Blöcke auszutauschen, verschieben wir zuerst den Block, den der Spieler an einen Ort außerhalb des Bildschirms gezogen hat.
Wir tun dies, weil wir die Blöcke anhand ihrer Positionen lokalisieren müssen, bevor wir sie manipulieren können. Wenn wir anfangen, einen der Blöcke in die gespeicherte Position des anderen Blocks zu setzen, würden sie beide an der gleichen Position platzieren, was sie sehr schwer machen würde voneinander trennen. Indem wir den Block an einen bestimmten Ort verschieben, von dem wir wissen, dass sich kein anderer Block befindet, verhindern wir, dass sich jeder Block an demselben Ort wie ein anderer Block befindet, und verhindert, dass das System ein Problem hat, das den gewünschten Block bestimmt.
Wir werden dann den Block verschieben, den sie ausgetauscht haben Original Block mit dem ursprünglichen Block. Zum Schluss verschieben wir den ursprünglichen Block an die Position des zweiten Blocks außerhalb des Bildschirms und setzen die Informationen im Array auf zurück 0
.
Ereignis: Funktion> Ein Funktion Name: "SwapBlocks" Unterereignis: Bedingung: Block> Compare XX = BlockPositions.At (0,0) Bedingung: Block> Compare YY = BlockPositions.At (0,1) Aktion: Block> Set position X = -80 Y = -80 Unterereignis: Bedingung: Block> Compare XX = BlockPositions.At (1,0) Bedingung: Block> Compare YY = BlockPositions.At (1,1) Aktion: Block> Position X einstellen = BlockPositions.At (0,0) Y = BlockPositions.At (0,1) Unterereignis: Bedingung: Block> Compare XX = -80 Bedingung: Block> Compare YY = -80 Aktion: Blockieren> Position setzen X = BlockPositions .At (1,0) Y = BlockPositions.At (1,1) Aktion: BlockPositions> Auf XY setzen X = 0 Y = 0 Wert = 0 Aktion: BlockPositions> Auf XY setzen X = 0 Y = 1 Wert = 0 Aktion : BlockPositions> Setzen auf XY X = 1 Y = 0 Wert = 0 Aktion: BlockPositions> Setzen auf XY X = 1 Y = 1 Wert = 0
Ihre Veranstaltung Blatt dafür sollte so aussehen:
Gehen Sie nun zu den vier Überprüfungen zurück, mit denen wir vorher festgestellt haben, mit welchem farbigen Quadrat der gezogene Block kollidierte, und fügen Sie dies hinzu Aktion bis zum Ende der Aktionen Liste für alle vier:
Aktion: Funktion> Aufruffunktion Name: "SwapBlocks"
Wenn Sie das Spiel jetzt ausführen, funktioniert es fast perfekt. Das einzige, was es noch nicht tut, ist zu prüfen, ob der Block mehrere farbige Quadrate überlappt. (Wenn dies der Fall ist, möchten wir nicht, dass etwas passiert, da dies bedeutet, dass die Bewegung ein Fehler sein kann.)
Derzeit werden die farbigen Quadrate in der Reihenfolge geprüft Unterseite
, oben
, Links
, Recht
, und was immer es zuerst findet, es tauscht mit. Um dies zu beheben, müssen wir zu jeder Prüfung zwei umgekehrte Bedingungen hinzufügen.
Zum oben und Unterseite prüft, füge diese Bedingungen hinzu:
Bedingung: Umgekehrt: Block> Überlappt ein anderes Objekt Objekt: LeftBlock Bedingung: Umgekehrt: Block> Überlappt ein anderes Objekt Objekt: RightBlock
Zum Recht und Links prüft, füge diese Bedingungen hinzu:
Bedingung: Invertiert: Block> Überlappt ein anderes Objekt Object: TopBlock Bedingung: Invertiert: Block> Überlappt ein anderes Objekt Object: BottomBlock
Da die Quadrate nur 30x30px betragen, kann der Block nicht gleichzeitig zwei gegenüberliegende Enden überlappen. Durch diese Überprüfungen können wir sicherstellen, dass die schleppende Bewegung nicht zu stark nach beiden Seiten geneigt ist. Außerdem wird sichergestellt, dass der Spieler eine überwiegend gerade Bewegung hat, so dass klar ist, dass wir die richtige Art von Swap erkennen.
Ihre Veranstaltung Blatt sollte jetzt so aussehen:
Und hier ist eine Demo unseres Spiels in seinem aktuellen Zustand:
Klicken Sie hier, um die Demo zu laden.Wir haben jetzt eine voll funktionsfähige Wechselmechanik. Im nächsten Tutorial werden wir ein starkes Übereinstimmungserkennungssystem einrichten und das Gameplay wirklich in Aktion sehen.
Wenn Sie weiterhin alleine arbeiten möchten, sollten Sie prüfen, wie Sie erkennen können, wann zwei Blöcke dieselbe Farbe haben, und wie Sie wissen würden, ob sie nebeneinander liegen und ob sie eine vollständige Gruppe bilden. Ein guter Anfang wäre mit einem System> Für jeden
Veranstaltung mit der Block
Objekt, und führen Sie eine Art Überprüfung auf jedes Block
individuell.
Ich hoffe, Ihnen hat dieses Tutorial gefallen und Sie haben die Serie bisher sehr genossen. Stellen Sie sicher, dass Sie bald zurückkommen, um die nächste Rate zu erhalten.