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 (

)
und dort packen wir einen Code rein (

)
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 (

)(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:
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
}
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;
}
}
}
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;
}
}
}
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:
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
}
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;
}
}
}
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;
}
}
}
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;
}
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!
}
}
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