Das Erstellen schneller, einfacher Prototypenspiele ist eine großartige Möglichkeit, neue Spielideen schnell auszuprobieren, ohne sich dazu zu verpflichten, ein umfassendes Spiel zu erstellen. Ich benutze dafür gerne Game Maker, und in diesem Beitrag werde ich ein solches Spiel mit Ihnen teilen: Trainpunk, ein trainingsbasiertes Strategiespiel.
Anmerkung des Herausgebers: Dies ist eine neue Art von Post, die wir noch nicht ausprobiert haben. Bitte lassen Sie uns wissen, was Sie denken und ob Sie ähnliche Posts in der Zukunft sehen möchten!
Hier ist ein Video, in dem ich das ursprüngliche Konzept des Spiels skizziert und dann das Prototypenspiel selbst spielt:
Ich würde mir auch zeigen, wie ich die Kunst zeichne, aber es ist so einfach, dass es keinen wirklichen Grund dafür gibt.
Im letzten Spiel versuchen zwei Zuggruppen, die gegnerische Basis anzugreifen, während sie von Türmchen beschossen werden. Sie spielen, indem Sie Upgrades mit den Schaltflächen unten ausführen.
Bitte laden Sie das letzte Spiel (sowie den Quellcode und die Sprites) herunter und optimieren Sie das Gameplay nach Ihren Wünschen! Sie benötigen eine Kopie von Game Maker 8.
Hier ist eine grobe Übersicht über die Schritte, die ich zum Erstellen des Spiels unternommen habe. Sie können von Grund auf mitverfolgen oder dies verwenden, um die gesamte Quelle besser zu verstehen.
Laden Sie Game Maker 8 herunter und öffnen Sie es.
Erstelle eine neue SPIEL
Objekt mit diesen Eigenschaften:
"Kein Sprite"
falsch
wahr
-999
wahr
(kein Elternteil)
(wie Sprite)
Gib es diese Ereignisse:
# Ereignis erstellen: Code ausführen: Alarm [0] = 150; #Alarm Ereignis für Alarm 0: Code ausführen: Alarm [0] = 150; globale.punkte + = 1; globale.Punkte B + = 1,25; #Step Ereignis: Code ausführen: if! Instance_exists (oUpgradeHP) if! Global.points = 0 global.points - = 1; instance_activate_object (oUpgradeHP); instance_activate_object (oUpgradeRA); instance_activate_object (oUpgradeSS); instance_activate_object (oUpgradeAS); if! global.pointsB = 0 ID = select (1,2,3,4); // wenn ID = 1 global.hp2 + = 1; wenn ID = 2 global.ra2 + = 4; wenn ID = 3 global.ss2 + = 1; wenn ID = 4 global.as2 = global.as2 / 1.1; // global.pointsB - = 1; if! instance_exists (oTurretA) instance_deactivate_all (true); Schlaf (500); game_restart (); if! instance_exists (oTurretB) instance_deactivate_all (true); Schlaf (500); game_restart (); #Other Event: Spielstart: Code ausführen: // Train Team A global.hp1 = 5; // Gesundheitspunkte global.ra1 = 64; // Bereich global.ss1 = 6; // Shoot Speed global.as1 = 30; // Angriffsgeschwindigkeit // Trainiere Team B global.hp2 = 5; // Gesundheitspunkte global.ra2 = 64; // Bereich global.ss2 = 6; // Shoot Speed global.as2 = 30; // Angriffsgeschwindigkeit global.points = 1; global.pointsB = 1; room_goto_next (); #Draw Event: Code ausführen: draw_set_color (c_black); draw_set_font (font0); // draw_text (x + 4, y + 4, "TEAM [PLAYER] - HP =" + Zeichenfolge (global.hp1) + "- RA =" + Zeichenfolge (global.ra1) + "- SS =" + Zeichenfolge ( global.ss1) + "- AS =" + Zeichenfolge (global.as1)); draw_text (x + 4, y + 18, "TEAM [ENEMY_] - HP =" + Zeichenfolge (global.hp2) + "- RA =" + Zeichenfolge (global.ra2) + "- SS =" + Zeichenfolge (global. ss2) + "- AS =" + string (global.as2));
Erstellen Sie ein anderes neues Objekt, _Block
, und mach es fest. Es ist nur für das Aussehen - es macht nicht viel selbst.
Erstellen Sie ein weiteres neues Objekt, das aufgerufen wird _BaseA
, mit diesen Eigenschaften:
_BaseA
wahr
wahr
-1
falsch
(keiner)
(keiner)
Das Sprite ist nur ein 16x16-Block. Nun gib es diese Ereignisse:
#Create Event: Code ausführen: hp = 100; #Step Event: Execute code: if hp < 0.9 instance_destroy();
Hier ist ein Bild des endgültigen Spiels als Referenz:
Erstellen Sie diesmal ein neues Objekt, um einen der Züge des Spielers darzustellen (ein weißes Rechteck auf den Spuren). Nennen _TrainA
und gib diese Eigenschaften:
_TrainA
falsch
wahr
0
falsch
_BaseA
(keiner)
Das Sprite sollte ein 16x16-Zug sein, der nach rechts zeigt. Gib dem Objekt diese Ereignisse:
#Create Event: Execute code: // Train Team A // Setzt Statistiken auf globale Variablen, die durch Upgrades festgelegt werden. hp = global.hp1; // Gesundheitspunkte ra = global.ra1; // Bereich ss = global.ss1; // Shoot Speed as = global.as1; // Angriffsgeschwindigkeitsrichtung = 360; Geschwindigkeit = 2; #Alarm Ereignis für Alarm 0: Dieses Ereignis verlassen. #Step Ereignis: Code ausführen: n = Instanznächste (x, y, oBaseB); wenn distance_to_point (n.x, n.y) < ra if alarm[0] < 1 i=instance_create(x,y,oBulletA); i.speed = ss; alarm[0] = as; speed = 0; else speed = 2; if hp < 0.9 instance_destroy(); /* hp = global.hp1; // Health Points ra = global.ra1; // Range ss = global.ss1; // Shoot Speed as = global.as1; // Attack Speed */
Wir machen jetzt die Türmchen des Spielers. Erstellen Sie ein neues Objekt namens _TurretA
, und gib diese Eigenschaften:
_TrainA
falsch
wahr
0
falsch
oBaseA
(keiner)
Ich habe hier das gleiche Sprite wie für den Zug des Spielers verwendet, aber ich kann es gerne in einen echten Turm verwandeln. Es sollte 16x16px sein. Ereignisse hinzufügen:
#Create Event: Code ausführen: hp = 25; // Lebenspunkte ra = 128; // Bereich ss = 15; // Aufnahmegeschwindigkeit als = 20; // Attack Speed #Alarm Ereignis für Alarm 0: Dieses Ereignis verlassen. #Step Ereignis: Code ausführen: n = instance_nearest (x, y, oBaseB); wenn distance_to_point (n.x, n.y) < ra if alarm[0] < 1 i=instance_create(x,y,oBulletA); i.speed = ss; alarm[0] = as; if hp < 0.9 instance_destroy();
Die Türmchen müssen Kugeln abschießen, erstellen Sie also ein neues Objekt, um diese darzustellen. Nennen OBulletA
, und gib diese Eigenschaften:
_BulletA // Ein dünner
falsch
wahr
1
falsch
(kein Elternteil)
(wie Sprite)
Das Sprite sollte eine dünne Kugel sein (1 x x 16 x x breit, innerhalb eines transparenten 16x16px-Quadrats) und nach rechts zeigen. Hier sind seine Veranstaltungen:
#Create Event: Code ausführen: n = Instanznächste (x, y, oBaseB); direction = point_direction (x, y, n.x, n.y); #Step Event: Code ausführen: image_angle = direction; #Collision Event mit Objekt o_Block: Zerstöre die Instanz #Collision Event mit Objekt oBaseB: Code ausführen: #instance_destroy (); other.hp - = 1;8. Erstellen Sie ein neues Objekt (oSpawnerA)
Informationen zum Objekt: oSpawnerA Sprite: _TrainA // Immer noch mit dem Zugsprite fest Fest: Falsch Sichtbar: Falsch Tiefe: 0 Persistent: Falsch Übergeordnet:Maske: Ereignis erstellen: Code ausführen: Alarm [0] = 180; instance_create (x, y, oTrainA); Alarmereignis für Alarm 0: Code ausführen: Alarm [0] = 180; instance_create (x, y, oTrainA);
Wenn der Player seine HP aktualisieren kann, leuchtet die entsprechende Schaltfläche auf:
Wir werden diesen Button jetzt erstellen. Erstellen Sie ein neues Objekt namens oUpgradeHP
, und gib diese Eigenschaften:
_UpgradeHP
falsch
wahr
-99
falsch
(kein Elternteil)
(wie Sprite)
Gib es auch diese Ereignisse:
#Create Event: Code ausführen: image_alpha = 0.5; Mausereignis für Links freigegeben: Code ausführen: global.hp1 + = 1; instance_deactivate_object (oUpgradeHP); instance_deactivate_object (oUpgradeRA); instance_deactivate_object (oUpgradeSS); instance_deactivate_object (oUpgradeAS); Mausereignis für Maus Enter: Execute code: image_alpha = 1; Mausereignis für Mouse Leave: Code ausführen: image_alpha = 0.5;
Duplikat oUpgradeHP
dreimal, so dass Sie vier Objekte haben - jeweils eine Taste zum Aktualisieren von HP, RA, SS und AS. (oUpgradeHP
, oUpgradeRA
, oUpgradeSS
, oUpgradeAS
).
Ändere das Links freigelassen
Ereigniscode für jeden:
oUpgradeHP -> global.hp1 + = 1; oUpgradeRA -> global.ra1 + = 4; oUpgradeSS -> global.ss1 + = 1; oUpgradeAS -> global.as1 = global.as1 / 1.1;
Duplikat oBaseA
, oTrainA
, oTurretA
, oSpawnerA
und OBulletA
erschaffen oBaseB
, oTrainB
, oTurretB
, oSpawnerB
und oBulletB
.
Ändern Sie ihre Eltern (von "A" in "B") und ändern Sie ihren gesamten Code von:
n = Instanznächste (x, y, oBaseB);
… An:
n = Instanznächste (x, y, oBaseA);
… nach Bedarf.
Stellen Sie auch oTrainB ein Richtung = 180;
im create-Ereignis anstelle von Richtung = 360;
. Wählen Sie als Letztes für Sie nach links gerichtete Sprites aus.
Fügen Sie alle Ihre Tilesets, Sprites, Kunstwerke und so weiter hinzu und erstellen Sie zwei neue Räume: einen ist es rm_intro
, wo solltest du nur das legen obj_Game
, und der andere ist der Hauptraum (rm_main
).
Baue dein rm_main
wie so:
Sie könnten versuchen, den Raum symmetrisch zu gestalten, so dass es einigermaßen fair ist, oder mehr Türme auf der Seite des Feindes platzieren, um ein schwierigeres Gameplay zu erreichen. Es liegt an Ihnen - der springende Punkt eines Prototyps ist es, Dinge zu testen!
Jetzt das Spiel spielen. Überlegen Sie sich beim Spielen, was sich ändern muss. Sollten die Züge schneller oder langsamer sein? Sollte es häufiger zu Upgrades kommen? Sollte der Computer einen unfairen Vorteil haben? Sollte der Spieler mehr haben als nur Upgrades anzuwenden? Tweak weg!
Ich hoffe, Sie haben ein bisschen etwas über das Erstellen von Spielen gelernt - aber, was noch wichtiger ist, ich hoffe, Sie haben gelernt, wie eine Idee schnell zu einem Prototyp zusammengebrochen werden kann.
Anmerkung des Herausgebers: Dies ist eine neue Art von Post, die wir noch nicht ausprobiert haben. Bitte lassen Sie uns wissen, was Sie denken! Gibt es etwas, das Sie uns in Zukunft mit dem Format anders machen möchten? Möchten Sie mehr Details im Video oder eine ausführlichere Anleitung zum Erstellen des Spiels??