[Game Maker] Simples Jump and Run erstellen [EASY]

07/31/2011 03:55 irrenhaus#1
Hallo Community,

Heute zeig ich euch wie ihr mit dem Game Maker ein Simples Jump and Run erstellt.

Hier ist eine kurze Liste was ihr benötigt
  • Game Maker
  • Game Maker Grundkentnisse

Ich werde es so einfach wie möglich für euch machen.

Da ich gerne auf Drag and Drop verzichte ist das hier ein Code Tutorial.


So dann fangen wir auch gleich mal an...
Als erstes macht ihr ein Neues Spiel und erstellt 5 Sprites (als beispiel 32x32)
Code:
[COLOR="Orange"]spr_player_idle
spr_player_move
spr_block
spr_ramp_l
spr_ramp_r
[/COLOR]
Zu beachten sind die sprites:
Code:
[COLOR="Orange"]
spr_ramp_l
spr_ramp_r
[/color]
diese müssen immer 1 pixel größer in der Weite sein als der Block Sprite.
Und dann setzt ihr noch bei X: anstatt eine 0 eine 1 rein.
Das sieht dann so aus:

So das hätten wir schonmal.
Nun kommen wir zu den Objecten.

Als erstes erstellen wir 5 Objecte,
Code:
[COLOR="Orange"]obj_player
obj_block_parent
obj_block
obj_ramp_r
obj_ramp_l[/COLOR]
Und zu beachten sind dort schon die Optionen!
Code:
[COLOR="Orange"]
obj_block
obj_ramp_r
obj_ramp_l
obj_block_parent[/COLOR] (Nur solid keinen parent auswählen!)
Bei diesen Objecten müsst ihr bei Solid einen Hacken machen
und als Parent
Code:
[COLOR="Orange"]
obj_block_parent
[/color]
auswählen!
das sieht dann wie folgt aus:

So nun kommen wir zu dem etwas spannenderen Teil.

Als erstes bearbeiten wir obj_player.

Dazu erstellen wir ein Step-Event ([Only registered and activated users can see links. Click Here To Register...])
und dort packen wir einen Code rein ([Only registered and activated users can see links. Click Here To Register...])

Nun fangen wir als erstes mit dem wohl wichtigstem im Jump and Run Game an, die Gravitation!

Dazu packen wir folgenden code in das Step event:
Code:
if place_free(x,y+1) //Checken ob Platz frei ist!
{
gravity = 1; //Gravitation auf 1 setzen
}
else //Wenn kein Platz frei ist...
{
gravity = 0; //...Gravitation auf 0 setzen
}
So nun haben wir schonmal den Basic Gravitations Script.
Doch darunter packen wir noch etwas:
Code:
if vspeed > 14 //Wenn die Vertikale Geschwindigkeit größer als 14 ist  dann...
{
 vspeed = 14; //...ist vspeed = 14
}
So das sieht doch schonmal ganz gut aus

Der fertige Code müsste nun so aussehen:
Code:
if place_free(x,y+1) //Checken ob Platz frei ist!
{
gravity = 1; //Gravitation auf 1 setzen
}
else //Wenn kein Platz frei ist...
{
gravity = 0; //...Gravitation auf 0 setzen
}

if vspeed > 14 //Wenn die Vertikale Geschwindigkeit größer als 14 ist  dann...
{
 vspeed = 14; //...ist vspeed = 14
}
Das ist ja für den Anfang nicht schlecht doch nun fällt der Character einfach nur runter und ist weg...
Das wollen wir ja nicht!

Und deshalb machen wir folgendes:
Wir Erstellen ein Neues Collision - Event ([Only registered and activated users can see links. Click Here To Register...])(mit obj_block_parent) und packen dort wieder ein Code rein, in den wir dashier reinschreiben:
Code:
move_contact_solid(270,4)// 270 => Direction => Vertikal nach unten , 4 => Maximale Entfernung.  Wenn man nun den Block berührt ist es ein fester Gegenstand!
vspeed = 0; //vspeed = 0 , also man fällt nun nichtmehr hinunter!
So um das zu testen, kann man schoneinmal einen neuen raum erstellen
und ein paar Blöcke reinpacken und auf den grünen Pfeil ganz oben drücken ( oder F5).
Das sieht bei mir nun so aus:


Naja aber das ist ja noch nicht alles nun kommen wir zu dem etwas schwereren Teil, undzwar die Bewegung.

Dazu gehen wir wieder das Step event vom obj_player und öffnen den Code

ganz unten packen wir dashier rein:
Code:
if (keyboard_check(ord("D"))) // Wenn man auf der Tastatur D drückt ( ord("D") für pfeil tasten vk_left/right/up/down ) dann...
{
if place_free(x+4,y) // wenn der Platz frei ist 4 pixel neben dem player dann...
{
x+= 4; // wird die x Position von dem Player um 4 erhöht!
sprite_index = spr_player_move; // Der Sprite des Players wird nun zu dem bewegungs sprite gechanged!
image_xscale = 1; // die Image XScale ( oder auch Spiegelung der X-Achse) ist 1 also normal
}
else //Wenn nicht!
{
if place_free(x+4,y-4) // Checken ob vllt etwas höher noch platz Frei ist! ( rampen Effekt!)
{
x+=4; //hab ich schon erklärt
y-=4; // die X Position des Players wird um 4 reduziert damit er nach oben geht!
sprite_index = spr_player_move;
image_xscale = 1;
}
}
}
Das war jetzt schon ein wenig basic script!
Dieses event wiederholt man auch für den Anderen button! doch bitte beachten das die Werte anders Abgezogen werden müssen!:
Code:
if (keyboard_check(ord("A"))) // Wenn man auf der Tastatur A drückt ( ord("A") für pfeil tasten vk_left/right/up/down ) dann...
{
if place_free(x-4,y) // wenn der Platz frei ist 4 pixel neben dem player dann...
{
x-= 4; // wird die x Position von dem Player um 4 reduziert!
sprite_index = spr_player_move; // Der Sprite des Players wird nun zu dem bewegungs sprite gechanged!
image_xscale = -1; // die Image XScale ( oder auch Spiegelung der X-Achse) ist -1 also spiegelverkehrt!
}
else //Wenn nicht!
{
if place_free(x-4,y-4) // Checken ob vllt etwas höher noch platz Frei ist! ( rampen Effekt!)
{
x-=4; //hab ich schon erklärt
y-=4; // die X Position des Players wird um 4 reduziert damit er nach oben geht!
sprite_index = spr_player_move;
image_xscale = -1;
}
}
}
So..
Der Fertige Code sieht bei mir nun so aus:

Wie man schwer erkennen kann nimmt der Code langsam an Masse an, doch fertig sind wir noch nicht!
Als nächstes wollen wir ja das der Sprite nicht die ganze Zeit der Bewegungs Sprite ist!

und deshalb packen wir wieder ganz unten hin:
Code:
if (keyboard_check_released(ord("D"))) //checken ob D losgelassen worden ist!
{
sprite_index = spr_player_idle; //Sprite auf den Bewegungslosen Sprite zurücksetzen!
image_xscale = 1;
}

if (keyboard_check_released(ord("A"))) //checken ob A losgelassen worden ist!
{
sprite_index = spr_player_idle; //Sprite auf den Bewegungslosen Sprite zurücksetzen!
image_xscale = -1;
}
So nun kann man wieder auf den grünen Play Button drücken und sehen was passiert =) ( man kann schon die Slopes dazu packen :)!!!)

So nun ist es auch schon fast geschafft!

das einzige was wir noch hinzufügen wollen ist sogar im Type des Games enthalten Jump and Run!

So dazu packen wir ganz unten in den Code wieder folgendes rein:
Code:
if (keyboard_check(ord("W"))) //gucken ob W gedrückt wird!
{
if place_meeting(x,y+1,obj_block) or place_meeting(x,y+1,obj_ramp_l)  or place_meeting(x,y+1,obj_ramp_r)  // Wenn man den boden berührt dann... ( or => oder => sollte es nicht so sein guckt man ob es vllt auf die Funktion NACH dem or geht ) 
 {
 y-=1;    //springt er :)
 vspeed -=8; // <-Geschwindigkeit!
 }
}
SO NUN SIND WIR FERTIG UND ES SOLLTE KLAPPEN! =)

Hier nocheinmal mein Fertiger Code:

Ich hoffe das es bei euch genauso gut klappt , wie bei mir und es euch gefallen hat!

Feedbacks sind immer gern gesehen ( aber bitte nicht beleidigen )

Die GMK hab ich nochmal als Dateianhang dazu gepackt.

Mfg
[X]Gold
08/02/2011 14:35 KingNiveau#2
Werde ich gleich mal ausprobieren! €dit: OK doch nicht ich hab keine Grundkenntise mit gamemaker
08/04/2011 15:32 ZenZen.Kwaii#3
Sehr gut, hab das so ähnlich mal für die psp angefangen hatte dann auchn schönen Block der springhen konnte und laufen xD
Für den Anfang ist das wircklich ein gutes Beispiel zum lernen bzw. darstellen
08/26/2011 19:02 _Eckl#4
Finde das Tutorial nicht schlecht wenn man schon mal was mit Gamemaker gemacht hat aber so ein Anfänger wie weiß überhaupt nichts.
Könnest du ein Anfänger Tut machen wo du schreibst was Gamemaker ist und BlaBla so in etwa ein kleines Review von Gamemaker
08/20/2013 16:16 immerletsplayer#5
Wenn ich D oder A oder W drücke steht da:


___________________________________________
################################################## ##########################################
FATAL ERROR in
action number 1
of Step Event0
for object object0:

Push :: Execution Error - Variable Get -1.spr_player_idle(100000, -1)
at gml_Object_object0_Step_0 (line 22) - sprite_index = spr_player_idle; //Sprite auf den Bewegungslosen Sprite zurücksetzen!
################################################## ##########################################
09/20/2013 22:29 #AchilezZ#6
Super Tutorial!
02/18/2014 20:54 crash71000#7
___________________________________________
FATAL ERROR in
action number 1
of Collision Event with object obj_block_parent
for object obj_player_idle:

COMPILATION ERROR in code action.
Error in code at line 1:
ove_contact_solid(270,4)

at position 1: Unknown function or script: ove_contact_solid :: CreateFunctionToken Gilfe bitte