A következő címkéjű bejegyzések mutatása: game maker. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: game maker. Összes bejegyzés megjelenítése

2012. január 9., hétfő

GameMaker 8.0 (GML) Platform Játék Engine + Download

Ezt az engine-t inkább haladóbb GM-eseknek ajánlom, GML-ben írtam, tehát nincsenek benne Drag-n-Drop Action-ök, egész kódba van írva.

Egyenlőre a következőket tudja:
  • Alapvető Platform ugrándozás, ütközés
  • A pálya végén ajtón jutunk a következő pályára
  • Szedegetni való aranytallérok
  • Életsáv, hátralévő életek száma, pontszám megjelenítése
  • Tűz, ami szép lassan viszi le az életet
  • Tüske ami rögtön megöl
  • Extra élet, healthpack
  • Több pálya kezelése
  • Ha elfogy az összes életed vagy végigjátszod a játékot akkor kiírja az elért pontszámot

(Van egy-két eltérés a GML-es és a Drag-n-Drop változat között, próbáltam minél egyértelműbbé tenni az utóbbit, kezdők számára is kitűnő kiindulási pont.)


Ha kérdésed van akkor az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.
(Ezt ez engine-t csak összecsaptam, de sokat tanulhatnak belőle haladó GM-esek is, hamarosan ugyanezt az engine-t elkészítem kezdőknek Drag-n-Drop Aciton-ökkel, a könnyebb átláthatóság kedvéért.)

2011. szeptember 24., szombat

Végtelen számú játékos - Game Maker Multiplayer

Ma egész nap egy GameMaker-es Engine-en dolgoztam, lényegileg még nem tud mást, csak elindít egy session-t amibe lehet csatlakozni, és az ide csatlakozó játékosoknak keletkezik egy kis fehér kockája. (mellé van írva a mplay_player_id -nek az utolsó 4 számjegye), Ezzel a kockával tud bármerre kóvályogni a pályán. Ezzel a módszerrel elméletileg akárhány játékost ki tud szolgálni a program, de még csak kis méretekben teszteltem (3 játékos). 


Mit a legtöbb esetben most is egy számítógépen indítottam el a programot többször, így egyszerűbb és gyorsabb a tesztelés.

Felteszek majd egy forráskódos melyet bárki használhat a saját Multiplayer játékaiban.

Ha kiváncsi vagy, hogy készíthetsz te is könnyedén számítógépes játékokat, látogasd meg a GameMaker kezdőknek rovatot ahol részletes útmutatást kapsz a GameMaker letöltéséhez és használatához.

Ha bármilyen kérdésed van, megtalálhatod elérhetőségeimet a Kapcsolatfelvétel oldalon.

2011. június 22., szerda

GameMaker LIB -> GML (Draw)

Utolsóként a Draw fülön lévő néhány Action-t fogom bemutatni, ezek használatakor nem szabad elfelejteni, hogy  a Take Snapshot és a Create Effect kivételével mindegyik csak Draw Event-ben működik.

Draw Sprite

kirajzol egy Sprite-ot a képernyőre.
draw_sprite(sprite_neve,képkocka_száma,x,y)


Draw Background

Kirajzol egy Background-ot a képernyőre.
draw_background(background_neve,x,y)


Draw Text
Kiír egy szöveget vagy változót a képernyőre

draw_text(x,y,'szöveg')
draw_text(x,y,változó)



Draw Scaled Text
Kirajzol a képernyőre egy szöveget vagy változót, ez esetben azonban megadható a forgatás iránya és az esetleges nyújtás, tükrözés.
draw_text_transformed(x,y,'szöveg',szélesség_szorzó,magasság_szorzó,irány)


Draw Rectangle 

Kirajzol egy téglalapot a képernyőre.
draw_rectangle(x1,y1,x2,y2,körvonal)



Horisontal Gradient/Vertical Gradient

Kirajzol egy téglalapot a képernyőre és megadhatók az egyes sarkainak színei (átmenetes lesz.)
draw_rectangle_color(x1,y1,x2,y2,szín1,szín2,szín3,szín4,körvonal)


Draw Ellipse

Ellipszist rajzol a képernyöre.
draw_ellipse(x1,y1,x2,y2,keret)



Gradient Ellipse

Olyan ellipszist rajzol a képernyőre, melynek megadhatók a színei (közepe-széle)
draw_ellipse_color(x1,y1,x2,y2,szín1,szín2,körvonal)



Draw Line 

Egy egyszerü vonalat rajzol a program.
draw_line(x1,y1,x2,y2)


Draw Arrow

Egy nyilat rajzol melynek megadható a mérete.
draw_arrow(x1,y1,x2,y2,méret)



Set Color

Ezzel lehet beállítani azoknak az alakzatoknak és szövegeknek a színeit, melyeknek nincs a funkcióban ilyen paramétere.
draw_set_color(szín)




színkódok:
c_black, c_white, c_blue, c_red, c_yellow, c_green... stb.


Set Font

Ezzel lehet beállítani a megjelenített szövegek betűtípusát.
draw_set_font(font_neve)



Set Full Screen

Ezzel az Action-nel lehet átállítani a játékot teljeskpernyős módba és vissza.
window_set_fullscreen(true/false)


Take Snapshot
Ez az Action lefotózza a játékablakot és elmenti egy képfájlba.
screen_save(fájl_neve)


Create Effect

Ez az Action jelenít meg elöre megírt effekteket.
effect_create_above(ef_tipus,x,y,méret,szín)
effect_create_below(ef_tipus,x,y,méret,szín)

ef_típus:
ef_cloud, ef_explosion ef_... stb

méret:
1,2,3 (kicsi, közepes, nagy)

GameMaker LIB -> GML (Extra)

Particles
GameMaker-ben az Extra fülön találhatók Particles (részecskék). Ezeket a részecskéket arra használjuk, hogy különböző effekteket hozzunk létre. Ezek a részecskék főként pixel-ek, de lehet alakjuk is. Miután létrejöttek változhat az alakjuk, méretük, színük, irányuk sebességük... stb. GameMaker-ben 15 különféle részecskét tárolhatunk, ezeket jeleníthetjük meg a képernyőn. Ha GML-ben szeretnénk ilyen effekteket létrehozni, akkor a part_... parancsokat használjuk. (A GameMaker súgó-fájlban találsz még információt ezek használatáról.)


Play CD
Ez az Aciton lejátsza a hanglemezen található fájlokat. Megadható, hogy melyik legyen az első szám amit lejáttszik és melyik az utolsó.
cd_play(1,1000)

Stop CD
Ez az Action leállítja a cd lejátszását.
cd_stop()

Pause CD
Ez az Action megállítja a CD lejátszását, de bármikor folytatható.
cd_pause()

Resume CD
Ezzel az Action-nel lehet folytatni a CD lejátszását.
cd_resume()

Check CD
Ez az Action vizsgálja meg, hogy van-e lejátszható CD lemez a meghajtóban.

Check CD Playing
Ha éppen játsszuk a CD akkor végzi el az utána lévő Action-t

Set Cursor
Ennek az Action-nek a segítségével lecserélhetjük az egérmutatót egy Sprite-ra.
cursor_sprite=sprite_neve

GameMaker LIB -> GML (Score)

A Score fülön lévő Lib-ek három változót használnak (score, lives, health). Ezek globális változók, az egész játékban egy van belőlük (nem egy Object-hez tartozik), sőt, amikor a játék átmegy egy másik Room-ba akkor is megtartják értéküket.


Set Score
Itt adhatjuk meg a score változó értékét.
score=valamennyi


Test Score
A program elvégez egy logikai vizsgálatot, ha igaz akkor lép tovább az utána következő Action-re
if score <>= valami then valami történik


Draw Score
Kiírja a program a képernyőre a score változó értékét.
draw_text(x,y,score)


Show Highscore
A játék megjelenít egy Top10 táblát, melyre felkerül az ember, ha megdönti az ember a 10. helyen lévő pontszámot.
highscore_show(score)


Clear Highscore
Kitörli az összes bejegyzés a Highscore tábláról.
highscore_clear()


Set Lives
Ezzel állíthatjuk be a lives változó értékét.
lives=valamennyi


Test Lives
Elvégez egy logikai viozsgálatot a lives változóval kapcsolatban, és csak akkor valósul meg az utána lévő Action vagy Block ha az eredmény igaz.
if lives<>= valamennyi then valami _történik


Draw Lives
Ez az Action jeleníti meg a képernyőn a lives változó értékének megfelelő számú szivecskét adott helyen. Nem helyettesíthető egy GML funkciófal.


Draw Lives Images
Ezzel az Action-nel állíthatunk be egyedi képet a Draw Lives Action-höz. Ez sem helyettesíthető kódban.


Set Health
Ezzel adhatjuk meg a health változó értékét (alapértelmezetten 100)
health=valamennyi


Test Health
Ez az Action logikai vizsgálatot végez a health változóval, és ennek végeredménye függvényében végzi el az utána lévő Action-t.
if health<>=valamennyi then valami_történik


Draw Health
Ezzel az Action-nel rajzolhatunk ki életmérőt a képernyőre.
draw_healthbar(x1,y1,x2,y2,health,háttér_szín,min_érték_szín,max_érték_szín,irány,háttér,keret)


Score Caption
Ez az Action beállítja az ablak címének az aktuális score, health és lives értéket.
room_caption=string('Score: ')+string(score)+string(' Lives: ')+string(lives)+string(' Health: ')+string(health)

2011. június 21., kedd

GameMaker LIB -> GML (Control)

Check Empty
Megvizsgálja hogy az adott hely üres-e, ha igen akkor valósul meg az utána következő Action.
if place_empty(x,y) then valami_történik

Check Collision
Egy adott object,el való ütközést vizsgál, ha igaz akkor következik be az utána lévő Action.
if collision_point(x,y,object_neve,pontos,nem_én) tehn valami_történik

Check Object
Ha az adott helyen megtalálható az Object, akkor következik be az utána lévő Action
if position_meeting(x,y,object_neve) then valami_történik

Test Instance Count
Megvizsgálja, hogy az adott Object-ből hány van a szobában és ahhoz képest lesz igaz az összefüggés.
if instance_number(object_neve)>valamennyi then malami_történik

Test Chance
A program dob egy n oldalú dobókockával, és ha 0-t kap akkor végzi el az utána lévő Action-t.
if floor(random(n))=0 then valami_történik


Check Question
A játék kiad egy kérdésablakot, és ha a játékos a Yes gombra kattint akkor történik meg az utána lévő Action.
if show_question('Ki szeretnél lépni?')=true then game_end()

Text Expression
A program megvizsgál egy összefüggést, ez lényegileg lehet bármi, ha ez igaz akkor valósul meg az utána lévő Action.
if valami1=valami2 then valami_történik


Check Mouse
Megvizsgálja, hogy le van-e nyomva az adott egérgomb, és ha igen, akkor elvégzi az Action-t.
mouse_check_button(egér_gomb)
(mb_left, mb_right, mb_middle, mb_any, mb_none)

Start Block/End Block
A Block-okat arra használjuk, hogy ha egy vizsgálat után több Action-t is el akarunk végeztetni a programmal.
if valami_vizsgálat=igaz
{
valami_történés
még valami történés
}

Repeat
Az utána következő Action-t megismétli a program n-szer.
repeat(5) valami_történés

Else
Ha valaki nem valósul meg akkor fog megtörténni az Action.
if valami=0 then valami_történés1  //ha ez nem igaz akkor az Else megvalósul
else valami_történés2


Exit Event
Ezt az Action-t akkor használjuk, ha azt szeretnénk, hogy a program nem csinálja végig ebben az Avent-ben a többi Action-t.
if valami=valami then exit  // ha valami=valami teljesül akkor nem csinálja a többi actiont, ha nem akkor megy tovább...(ezt minden Step-ben vizsgálja.)
...


Excute Code
Ezt az Action-t használjuk ha GML-ben szeretnénk programozni.


Excute Script
Scriptek hozzáadása után ezzel indíthatjuk el azokat.
script_execute(script_neve,változó1,változó2...)


CommentEz semmiképpen sem befolyásolja a játékmenetet, csak a programozó láthatja, feljegyzések készítésére használhatjuk.
// valami megjegyzés


/*
valami megjegyzés
még egy kis megjegyzés
sok megjegyzés
*/


Set Variable
Ezzel az Action-en megadhatjuk egy változó értékét.
valami1=valami2


Test Variable
Megvizsgálhatjuk a változó értékét, és ha <,>,= az általunk megadott értékkel vagy változóval akkor történik a következő Action.
if valami1=valami2 then valami_történik


Draw Variable
Ezt akkor használjuk, ha ki szeretnénk írni egy változó értékét a képernyőre.
draw_text(x,y,változó_neve)
draw_text(x,y,'szöveg')

2011. június 20., hétfő

GameMaker LIB -> GML (Main2)

Set Alarm
Ez az Action indítja el az Alarm-okat, megadhatjuk ennek a sorszámát és az időtartamot Step-ben. Amikor lejár ez az idő akkor fog teljesülni az adott sorszámú Alarm Event.
alarm[0]=

Sleep
Ez az Action arra alkalmas hogy adott időtartamra megállítsa a játékot. elt millisec-ben mérjük.
sleep(idő_ms)

Set Time Line/Time Line Position/Time Line Speed/Start Time Line/Pause Time Line/Stop Time Line 
Ezek a funkció arra alkalmasak, hogy az előre ütemezett történéseket kezeljünk, GML-ben néhány változót használunk ehhez:
timeline_index=timeline_neve

timeline_position= (0-1)
timeline_speed=
timeline_loop=true/false

Display Message
Egy üzenetablakot mutat a játékosnak, ezt GML-ben egy funkcióval helyettesítjük:
show_message('szöveg')

Show Info
Megjeleníti egy ablakban a Game Information-t. GML-ben a show_info() funkciót használjuk.

Splash Text
Megjeleníti egy megadott *.txt fájl tartalmát.
splash_show_text(fájl_neve,késleltetés)


Splash Image
Megjelenít egy megadott kép-fájlt.
splash_show_image(fájl_neve,késletetés)

Splash Web
Megjelenít egy megadott URL-címen található weblapot.
splash_show_image(url,késleltetés)

Splash Video
Megjelenít egy videó-fájlt.
splash_show_video(fájl_neve,ismétlés)

Splash Settings
Ezzel az Action-nel lehet a játék alapvető beállításait módosítani játék közben. GML-ben a következő funkciók használhatók erre:

window_set_caption('ablak_neve')
window_set_fullscreen(true/false)
window_set_showicons(true/false)
window_set_showborder(true/false)

Restart Game
Újraindítja az egész játékot.
game_restart()

End Game
Kilép a játékból
game_end()

Save Game
Elmenti a játék mostani állását.
game_save('fájl_neve')

Load Game
Betölti az elmentett játékállást.
game_load('fájl_neve')

Replace Sprite/Replace Sound/Replace Background
Lecseréli a játékban található összetevőket fájlban tároltakra. GMK-ben a következő funkciók használhatók:

sprite_replace(sprite_neve,fájl_neve,képkocka_száma,háttér_törtlése,élsimítés,x_közép,y_közép)
sound_replace(sound_neve,fájl_neve,típus,azonnali_betöltés)
background_replace(background_neve,fájl_neve,háttér törlése,élsimítás)

GameMaker LIB -> GML (Main1)

Ma a Main1 LIB Action-jeit mutatom be, valamit a GML megfelelőit.

Create Instance
A szoba megadott részén létrehoz egy Object-et, GML ben egy három paraméteres funkcióval helyettesítjük:
instance_create(x,y,object)

Create Moving
Létrehoz egy Object-et a pályán, azonban nem csak az x, y koordinátáit, hanem a sebességét s a haladás irányát is megadhatjuk. Ez nem helyettesíthető egy funkcióval azonban az instance_create(x,y,object) finkcióval létrehozhatjuk az Object-et, és annak a Create Event-jébe megadhatjuk a direction-t és a speed-et.

Create Random
Ezt az Action lényegileg létrehoz egy random Object-et megadott helyen. Ez az Action azonban maximum négy object közül tud randomolni. GML-ben nincs egy-az-egyben megfelelője, azonban a a kövekező kódal naggyából helyettesíthető:

randomobject=floor(random(4))
if randomobject=0 then instance_create(x_keletkezes,y_keletkezes,object1)
if randomobject=1 then instance_create(x_keletkezes,y_keletkezes,object2)
if randomobject=2 then instance_create(x_keletkezes,y_keletkezes,object3)
if randomobject=3 then instance_create(x_keletkezes,y_keletkezes,object4)


(randomobject változót mi hozzuk létre, ahhoz, hogy működjön a jelenlegi object Create Event-jébe be kell írnunk a következő kódot: randomobject=0)

Change Instance
Ezt az Action-t akkor használjuk, ha szeretnénk ha az adott Object átválzona egy másikká. A Perform Events mezőnél kiválaszthatjuk hogy megtartsa a jelenlegi sebességét irányát ...stb, vagy csak a pozicióját. GML ben egy funkcióval helyettesíthető:
instance_change(object,tulajdonságok_megtartása)


Destroy Instance
Ez az Action levesz a pályárol a jelenlegi Objected, kódban a következő képpen használjuk:
instance_destroy()


Destroy at Position
Ez az Action letörli a pályáról az adott helyen lévő Object-eket. GML-ben nem helyettesíhető azonban könnyen kikerülhető.


Change Sprite
Ezeel az Action-nel lehet lecserélni az adott Object Sprte-ját, megadni az animáció irányát, a váltáskor óhajtott képkockát, kódban három változót használunk:
sprite_index=sprite_neve
image_index=képkocka_sorszáma
image_speed=animáció_sebessége (1 vagy -1)

Transform Sprite
Átméretezi és elforgatja a Sprite-ot, kódban a következő változókat használjuk:
image_xscale=
image_yscale=
image_angle=

Color Sprite
Átszinezi a Sprite-ot és megadhatjuk az átlátszóságát is, GML-ben csak az átlátszóság adható meg:
image_alpha=

Play Sound
Ezzel lejátszhatunk egy előre importál hang-fájlt. Gml-ben egy egyszerű fiunkcióval helyettesítjük:
sound_play(sound_neve)

Stop Sound
Megállítja az adott hangot ha éppen pátszódik:
sound_stop(sound_neve)

Check Sound
Ez az Action megvizsgálja, hogy egy adott hang éppen játszódik és ha igen akkor megcsinálja az utána következő actiont, kódban a következő módon helyettesítjük:
if sound_isplaying(sound_neve) then törénik_valami


Previous Room/Next Room
Ez a két action arra való, hogy a játék étlépjen az előző vagy a következő szobába, animáció is megadható. Kódban a room_goto_next() és room_goto_previous() funkciót használjuk.

Restart Room
Ezt akkor használjuk ha újra szeretnéni indítani a játékot a jelenlegi szobában, azaz minden kerüljön vissza az eredeti helyére, állaptába. kódabn a room_restart() funkciót használjuk.

Different Room
Itt ez egy olyan Action ami átviszi a játékot egy másik szobába, megadhatjuk, hogy melyikbe. GML:
room_goto(room_száma)


Check Previous/Check Next
Ha létezik az előző vagy a következő szoba akkor csinálja meg az utána következő Action-t.
if !room=room_first then történik_valami
if !room=room_last then történik_valami

2011. június 19., vasárnap

GameMaker LIB -> GML (Move)

Sokat használtuk a kis behúzogatható ikonokat az Object-eknél, ezentúl viszont csak az Excute Code-ra lesz szükségünk ugyanis ekezdünk GML-ban kisebb-nagyobb kódokat írni. A következő néhány bejegyzésben le fogom írni a GameMaker-ben lévő összes Action lényegét és GML megfelelőjét.

1. fül (Move)

Move Fixed/Move Free
A két Action lényegileg megegyezik, a Move Free annyival bővebb, hogy itt már adott értéket tudunk megadni az irányhoz is. Kódban két változót használunk ezek megadásához:
direction=
speed=

Move Towards Point
Ezt az Action-t akkor használjuk ha azt szeretnénk, hogy az Object egy adott  pont irányába haladjon. Ennek GML-ben a megfelelője a következő funkció:
move_towards_point(x,y,sebesség)

Speed Horisontal/Speed Vertical
Ez a két Action az Object vízszintes és függőleges irányú sebességének megadására alkalmas, könnyen helyettesíthető két változóval:
vspeed=
hspeed=


Set Gravity
Ez a Lib alkalmas platform játékoknál megadni a gravitációt, de használható bármilyen irányú adott nagyságú egyenletes gyorsuláshoz is. Ennek helyettesítére két változót használunk:
gravity=
gravity_direction=


Reverse Horisontal/Reverse Vertical
Ez a két action nem csinál mást mint visszafordítja az Object-et vízszintes vagy függőleges irányban. (A vízszintes vagy a függőleges sebességét megszorozza -1 el.) Kódban a következő képpen néz ki:
vspeed=hspeed*-1
hspeed=vspeed*-1


Set Friction
Ez alkalmas az Object-nek egy egyenletes lassulást (súrlódást) beállítani, kódban ez is egy változóval helyettesíthető:
friction=


Jump to Position
Itt egyszerűen megadhatjuk az x és y koordinátát ahova át szeretnénk helyezni az Object-et:
x=
y=


Jump to Start
Ez az Action arra voló hogy az Object visszaugrik a kezdőhelyére, azonban nem helyettesíthető GML-ben (illetve akkor helyettesíthető ha kezdéskor változókban tároljuk a pozicióját.)


Jump to Random
Ez az Action akkor lehet hasznos ha egy Object-et át szeretnék tenni egy véletlenszerű helyre, megadhatjuk azt is ha rácshoz szeretnénk igazítani. Kódban ez kicsit bonyolultabb, a következő képpen helyettesíthető (a példában 32 pixel széles és magas rácshoz igazítottuk.):

x=floor(random(room_width)/32)*32
y=floor(random(room_height)/32)*32

Aglin to Grid
Az adott Object-et megadott nagyságú rácshoz igazítja, kódban (rács szélessége és magassága 32):
x=floor(room_width/32)*32+32/2
y=floor(room_height/32)*32+32/2

Warp Screen
Ha az Object kimegy a képernyőből akkor átkerül a pálya átellenes oldalára. Ez is egy bonyolultabb kóddal helyettesíthető:

if x>room_width then x=0
if x<0 then x=room_width
if y>room_height then y=0
if y<0 then y=room_height


Move to Contact
Ez az Action arra használható, egy Object-et egy adott irányba elmozdítson addig, hogy éppen találkozzon egy másik Object-el. Ez két féle kóddal helyettesíthető az Object-től függően:

move_contact_all(irány,max_elmozdulás)
move_contact_solid(irány,max_elmozdulás)


Bounce
Ezt az Action-t használjuk, ha azt szeretnénk elérni, hogy egy Object lepattanjon egy másikról, szintén két funkcióval helyettesíthető:

move_bounce_all(összetettség 0 vagy 1)
move_blunce_solid(összetettség 0 vagy 1)

Set Path
Ezt az Action akkor használjuk ha az Object-et egy előre megadott útvonalon szeretnénk mozgatni. Ez is egy funkcióval helyettesíthető:
path_start(path_neve,sebesség,ha_vége_történés,absolute)

ha_vége_történés lehet
0 - stop
1 - újrakezdés a kezdőponttól 
2 - újrakezdés a jelenlegi helyről
3 - visszafelé újra végigjárás

absolute lehet:
true - a path valós kezdőhelyéről kezd
false - az object jelenlegi helyéről indul

End Path
Megálitja az Object-et, akárhol tart az útvonalon, ez GML-ben egy paraméter nélküli funkció:
path_end()

Path Position
Az Object helye az adott útvonalon 0-1 -ig terjedő értéket vehet fel, 0 a Path eleje, 1 a vége. Kódban egy változóval hivatkozhatunk rá:
path_position

Path Speed
Ezzel adhatjuk meg az útvonalon való haladás sebességét, kódban:
path_speed=

Step Towards Point
Ez a parancs nem helyettesíthető egy funkcióval GML-ben, hasonló mint a Move Towards Point azonban ez megáll ha találkozik egy másik Object-el

Step Avioding
Szintén nem helyettesíthető egy funkcióval, arra használhatjuk, hogy adott pont felé haladás közben kikerülje többi Object-et (lecsússzon róla)






2011. június 18., szombat

GameMaker - 11. lecke

Az előző néhány leckében egy felülnézetes lövöldözős valamit készítettünk. Ma ezt a játékot újra elkészítjük kicsit másképp. Itt az ideje, hogy megismerkedjünk a GameMakerLanguige programozási nyelvel. A GML egy egyszerű programozási nyelv mellyel GameMaker-ben egy vagy több Action-t helyettesíthetünk.
Nyissuk meg GameMaker-ben az első játék.gm81 fájlt. Ha nincs meg a forráskód akkor innen letöltheted.
Nyissuk meg elsőként az obj_player tulajdonságait.


Lényegileg az összes Action helyettesíthető egy Excute Code Action-el Ezt a control fülön találjuk. Elsőként a Step Event-be hűzzunk egy Excute Code Action-t. 


A GML kódoknak az az előnye, hogy az összes más GameMaker-es Action-t lehet benne helyettesíteni, és még sok új lehetőség is van amit másképp nem tudnánk elérni. A kódszerkesztőbe háromféle parancsot  írhatunk.
  • Ha valami igaz akkor valami történik (if-then)
  • Valami egyenlő valami (=)
  • Előre megadott funkció
A Step Event-ben van egy Set Friction és egy Set Variable Action, ezért a kódszerkesztőbe két egyenlőséget fogunk írni. Elsőként a friction változót fogjuk beállítani 0.1-re. Ehhez gépeljük be a következő kódot: friction=0.1  (ha egy változónak az értékét akarjuk megadni akkor mindíg ilyen formában fogjuk megtenni.)
A Set Variable Action is hasonló itt a következő kódot használjuk: image_angle=direction (Ez esetben két változót tettünk egyenlővé, a Sprite iránya lesz egyenlő a haladási iránnyal.)
Ha egy kódba több parancsot is teszünk ezeket mindig új sorba írjuk. 


(A kódszerkesztő különböző színekkel emeli ki a vátozókat, a számokat, a funkciókat, és a megjegyzéseket.)
A pipára kattintva zárjuk be a kódszerkesztőt. Most már három Action van a Step Event-ben de nekünk már csak az Excute Code-ra van szükségünk, mert abban helyettesítettük a másik kettőt.  Töröljük ki a Set Friction és a Set Variable Action-t.

Ha most a játék futtatásakor nincs különbség akkor jól dolgoztunk, továbbhaladhatunk a Keyboard Event-ekkel. A Move Free Action-t két egyenlőséggel helyettesítjük. (speed=Move Free Action speed mezeje direction=Move Free Action direction mezeje) Adjunk hozzá a Keyboard <Left> Event-hez egy Excute Code Action-t és gépeljük bele a következő kódot:

speed=speed
direction=direction+10

(a parancsok sorrendje nem lényeges)


Ezután töröljük ki az Excute Code Action mellől a Move Free Action-t.

Ezt ismételjük meg az összes Keyboard Event-nél, figyeljünk hogy mindíg az addott speed és direction változás írjuk a kódba.

Az Outside Room Event-ben lévő Warp Screen Action-t nem tudjuk egy funkcióval helyettesíteni, ezért a következő kódot használjuk:

if x>room_width then x=0
if x<0 then x=room_width

if y>room_height then y=0
if y<0 then y=room_height

Az x és az y változók az Object koordinátái, a room_width és a room_height változók az ablak szélességét és  magasságát takarják.


A bonyodalom a press <Space> Event-nél adódik, ugyanis a Create moving Action-t nem lehet egy az egyben helyettesíteni. Excute Code-ba írjuk a következőt:

instance_create(x,y,obj_bullet)

Az instance_create funkciónak három paramétere van (ezeket írjuk zárójelbe) 
(x_koordináta,y_koordináta,object_neve)

Ezután töröljük ki a Create moving Action-t és nyissuk meg az obj_bullet tulajdonságait.

Hozzunk létre egy Create Event-et és íruk egy Excute Code Action-be a következőt:

speed=10
direction=obj_player.direction

(ezzel a kóddal helyettesítjük a Create moving Action-nek a moving részét.)
Ha egy másik Object változójára hivatkozunk először az Object nevét írjuk, aztán ponttal elválasztva a változó nevét.


Végül az Outside room Event-ben lévő Destroy Instance Actiont cseréljük ki a következő funkcióra:
 instance_destroy() 

(ennek a funkciónak nincsenek paraméterei, automatikusan leveszi a pályáról az adott Object-et.)

Most mentsük el a játékot. Ha mindent jól csináltunk nincs látványos változás a játékban, azonban később könnyebb lesz a forráskódot szerkesztenünk ha GML-t használunk.


Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Itt letöltheted a példafájlt melyet elkészítettünk ebben a leckében.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik. 

2011. június 16., csütörtök

GameMaker - 10. lecke

Ma egy kicsit tovább javítjuk a korábban kezdett pédafájlt. Amennyiben nincs meg az Első játék.gm81 fájl itt letöltheted az előző leckében készített változatot.

A játékosunk már tud egyenletesen körbe-körbe forogni, előre-hátra mászkálni és lőni is. Itt kezdődik a probléma. Ha megnyomjuk a <Space> billentyűt, keletkezik egy obj_bullet nevű Object. Pontosabban akárhányszor megnyomjuk a <Space> gombot egy új Object keletkezik amelynek a pozícióját, sebességét, Sprite-ját és az Event-jeit a processzor kiszámolja. Tehát ha nagyon sokat lövöldözünk egy idő után belassul a játék. (Nyilván ez a lassulás egy ilyen egyszerű játéknál lassan jelentkezik, azonban egy összetettebb játéknál ez komoly probléma lehet.) A lövedék iránya nem változik soha, tehát ha egyszer kimegy a Room-ból akkor soha nem jön vissza. Tehát létrehozhatunk egy Outside Room Event-et aminek az Action-je az lesz hogy leveszi a pályáról az Object-et. Ez persze nem fog látványos változás okozni, mégis jobb az ilyen apróságokra odafigyelni.

Nyissuk meg GameMaker-ben az első játékom.gm81 fájlt. Az Object-ek közül válasszuk ki az obj_bullet-et és nyissuk meg a tulajdonságait. Itt egyenlőre nincsenek Event-ek, ezért létre kell hoznunk az Outside room eventet. Ehhez kattintsunk az Add Event gombra majd válasszuk az Other menüpontból az Outside room Event-et. (Ezt az Event-et már használtuk korábban az obj_player-nél)


A main1 fülről rendelünk egy Destroy Instance Action-t az Outside room Event-hez. Ez az Action mmegsemmisít egy adott Object-et.


Az Applies to résznél lehet kiválasztani hogy melyik Object-re legyen érvényes. (Self az az adott Object, ahol az Action van, Other az egy olyan Object-re vonatkozik amelyel éppen az adott Object ütközik, az Object: lehetőségnél ki lehet választani, hogy melyik Object-re vonatkozzon.)
Esetünkben a lövedéknek kell megsemmisülnie, ezért nem kell változtatnunk a beállításokat, csak kattintsunk az OK gombra.


Ha simán futtatjuk a játékot semmilyen változást nem fogunk észlelni. Azonban ha a játékot Debugger (hibakereső) módban indítjuk akkor láthatjuk a változást. Ehhez a sima futtatás helyett nyomjuk meg az F6 billentyűt. Amikor elindul a játék, a megszokott játékablak mellett megjelenik egy Debug Information nevű ablak is. A jövőben ezt fogjuk használni hibák kiszűréséhez. Számunkra most az Object-számláló rész lesz érdekes melyet az ablak alján találunk. Ez kiírja az adott játékban lévő összes Object számát. (Az Object-eket egyes helyeken Instance-nek hívjuk.) Amikor megnyomjuk a <Space> gombot keletkezik egy lövedék és az Instance-számlálónak az értéke egyel nagyobb lesz. Amikor azonban a lövedék kimegy a pályáról a számláló visszaugrik 1-re. 


Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Itt letöltheted a példafájlt melyet elkészítettünk ebben a leckében.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik. 

Jump'n'Fun

A Jump'n'Fun egy régi projekem amit sokadszor kezdek újra különböző technikai okokból. A játékot a Linuxos Bump'n'Jump mintájára készítettem GameMaker-ben. Célja, hogy az ember a másik játékos fejre (tetejére) ugorjon, ekkor kapunk pontot. Ez kitűnően működött a korábbi verziókban is azonban körülbelül fél évvel ezelőtt felmerül a pályaszerkesztő igénye. Ezt azonban a meglévő játékhoz csak sok munkával és kevés sikerrel tudtam hozzátenni. Pár hete újrakezdtem a játék fejlesztését, ezúttal a pályaszerkesztővel kezdve. Pár nap alatt sikerül egy jól működő pályaszerkesztőt létrehoznom, ehhez már szinte gyerekjáték volt hozzárakni a játékosokat. Ugyan még nem tökéletes, grafikája egyenlőre minimális és kezelése is kissé nehézséges, de úgy éreztem itt az ideje, hogy megosszam az első béta verziót. A játékot még természetesen fejlesztem, a ti ötleteiteket is szívesen meghallgatom, beleágyazom a játékba.

Irányítás:

1. Játékos
jobbra: L
balra: J
ugrás: I

2. Játékos
jobbra: F
balra: S
ugrás: E

Pályaszerkesztő:
belépés a szerkesztőbe/kilépés a szerkesztőből: F5
1. játékos kezdőhelyének áthalyezése: P
2. játékos kezdőhelyének áthelyezése: O
pálya mentése: S
pálya betöltése: L
fal lerakása: Bal-egérgomb
fal törlése: Jobb-egérgomb
tükrözési mód: M

Demó letöltése: JnF-Beta-xA70-Final.exe (3,95MB)

Bármilyen észrevételed, javaslatod van, a Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

2011. június 15., szerda

GameMaker - 9. lecke

Ez előző leckében az megcsináltuk, hogy a játékos a <Space> gomb megnyomásával tudjon lőni. Itt letöltheted a példafájlt melyet az előző leckében készítettünk. Biztosan észrevettétek, hogy a lövedék a játékos fölé kerül. Ez azért van, mert a játékos x és y koordinátája mellett van egy úgynevezett mélység változója. A Depth határozza meg az adott Object mélységét a képernyőn, ha úgy tetszik ezzel állíthatjuk be a képernyőn megjelenő Sprite-ok sorrendjét. Alapértelmezetten a Depth mindig 0, azonban ha ezt az értéket növelem akkor hátrébb kerül a képernyőn. Pl.: a 0 Depth az előrébb van mint a 10 Depth.

Meg akarjuk csinálni, hogy a lövedék az obj_player alá kerüljön, ezért a Depth-ét nagyobbra  kell állítani mind az obj_player Depth-e. Ezt úgy tehetjük meg, hogy megnyitjuk az obj_bullet tulajdonságait és a baloldalt a név és a Sprite alatt megtaláljuk a Depth mezőt. Ide írjunk esetünkben a 10-es számot.


Ezután az OK gomb segítségével zárjuk be az obj_bullet tulajdonságait és mentsük el a játékot. Ezután ha játék közben megnyomjuk a <Space> gombot, a lövedék a játékos alá fog keletkezni.
De miért is volt a lövedék a játékos fölött, ha mindkét Object Depth-e 0 volt? Egész egyszerűen azért mert két Sprite-ot nem tud egymásba rakni a játék. Ezért ha két Object Depth-e ugyan annyi akkor mindíg az kerül följebb amelyik később keletkezett. (Esetünkben az obj_bullet.)



Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Itt letöltheted a példafájlt melyet elkészítettünk ebben a leckében.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik. 

2011. június 14., kedd

GameMaker - 8. lecke

Mindenki nagy meglepetésére ma is a szokásos első játék.gm81 forráskódot fogjuk szerkeszteni. Amennyiben nincs meg neked az előző leckében készített változat, ide kattintva letöltheted.

Miután megnyitottuk az első játék.gm81 fájlt GameMaker-ben hozzunk létre egy új Sprite-ot. (Ehhez kattitsunk a piros Packman-pofira...)

A megjelenő Sprite tulajdonságai ablakban válasszuk a Load Sprite gombot, hogy betölthessünk egy meglévő képfájlt.



A Sprites mappában található Bouncing Balls mappát nyissuk meg. (Ez az AppData-ban van tárolva)


A Bouncing Balls mappában sok szép képet találunk, válasszuk a ball_pinball.png fájlt és nyissuk meg.


Ezután adjuk meg a Sprite nevét, ne felejtsd el, hogy ne használj ékezetet és szóközt. Én a spr_bullet (lövedék) nevet adom neki. Ezutál a Center gomra kattintva a Sprite közepére helyezhetjük a forgáspontját. (Ezt a Sprite-ot ugyan nem fogjuk forgatni, azonban amikor keletkezik pontosan a játékosnál fog megjelenni.) Ezután zárjuk be a Sprite tulajdonságait az OK gombbal.


Ezután hozzuk létre a lövedék Object-et. Miután rákattintottunk a kék bogyóra máris megjelennek az új Object tulajdonságai.


Elsőként mindig adjuk meg a nevét, ez esetben célszerűen obj_bullet. Ezután az OK gombbal be is zárhatjuk ezt az ablakot, mert a lövedéknek nem kell semmit csinálnia.


Nyissuk meg az obj_player tulajdonságait és adjunk hozzá egy új Event-et. Ezúttal a Key Press Event-et választjuk. (A Keyboard és a Key Press Event között csak annyi a különbség, hogy a Keyboard-nál az adott gomb nyomvatartása során folyamatosan megtörténik az esemény (minden step-ben), a Key Press-nél csak a gomb megnyomásának pillanatában.)


Ezután válasszuk ki a lövés gombját, egyszerűség kedvéért legyen a <Space>.


Az oldalsávból válasszuk a main1 fület, ezen találjuk többek közt az Object létrehozása parancsokat.


Adjunk hozzá egy Create Moving Action-t a Key Press <Space> Event-hez.


Ez az Action létrehoz egy Object-et a Room-ban melynek itt megadhatjuk az irányát és sebességét. Válasszuk ki az obj_bullet-et mivel lövöldözni szeretnénk. Ezután az x és y mezőbe meg kell adni a keletkezés helyét, de ez megegyezik a játékos pozíciójával, ezért írjuk be az x és y parancsot. Ezután adjuk meg a lövedék sebességét, ez bármilyen valós szám lehet, célszerűen pozitív és nem túl nagy, a 10 tökéletes lesz. Végül meg kell adnunk a lövedék irányát, amely megegyezik a játékos irányával (Mert előrefelé lövöldözünk) ezért a direction mezőbe írjuk a direction változót. Végül az OK gombra kattintva elmenthetjük az Action-t.


A projekt mentése után futtassuk a játékot. Most már a szépen forgó, lassuló háromszög lövöldözni is tud, ha megnyomjuk a <Space> gombot.



Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Itt letöltheted a példafájlt melyet elkészítettünk ebben a leckében.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik. 

GameMaker - 7. lecke

Ebben a leckében megint az folytatjuk az előző leckékben készített játékot. Ha nincs meg a forráskód, innen letöltheted. Nyissuk meg GameMaker-ben az Első játékom.gm81 fájlt.

Az Object-ek közül nyissuk meg dupla kattintással az obj_player tulajdonságait.


Jelenleg a Keyboard Event-ekben (<Left> <Up> <Right> <Down>) egy-egy Move Fixed Action van. Ezeket kijelölésük után a Delete gomb megnyomásával törölhetjük. Ezt tegyük is meg mind a négy Keyboard Event-nél.


Ezután minden Move Fixed Action helyére tegyünk egy Move Free Action-t.


 A Keyboard <Left> Event-be tegyünk egy Move Free Action-t. (Ennél az Action-nél megadható a mozgás pontos irány (fokban), valamint a sebessége.) A direction mezőbe írjuk a direction+10 kódot. Ez azt jelenti, hogy az Object az eredeti irányához képest 10° balra fordul (A GameMaker-ben a pozitív irány az óramutató járásával ellentétes irányú, azaz ha egy Object irányához hozzáadunk n szöget, akkor az óramutató irányával ellentétes irányba fog elfordulni n fokkal.) Kanyarodáskor nem akarjuk változtatni az Object sebességét, ezért  írjuk a speed mezőbe a speed parancsot.


Az <Up> Event-hez szintén egy Move Fixed Action-t tegyünk. Ez esetben az Object irányát nem szeretnénk változtatni, csak a sebességét, ezért a direction mezőbe írjuk a direction parancsot.  A speed mezőbe egyszerűen írjunk egy pozitív számot, esetünkben írjunk kettőt, nem akarjuk, hogy túl gyors legyen az Object mozgása.


A <Right> Eventhez tartozó Move Fixed Action-t a <Left> Event "tükörképeként" töltsük ki. A direction mezőbe a direction-10 parancs, a speed mezőbe a speed kerüljön.


Végül a <Down> gomb megnyomásakor a direction ne vátozzon (direction), a speed pedig legyen -2.


Ezután egy gyors mentés után futtassuk a játékot. Mos mér az előző verziókkal ellentétben a játékos körbe tud fordulni 10°-onként, ha elengedjük a felfelé nyilat akkor egyenletesen lassul.

Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Itt letöltheted a példafájlt melyet elkészítettünk ebben a leckében.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik. 



2011. június 10., péntek

GameMaker - 6. lecke

Ez előző leckében készített forráskódot innen töltheted le.

A mai leckében kicsit továbbfejlesztjük a játékot amit az előző leckékben készítettünk. Először nyissuk meg az Első játékom.gm81 fájlt GameMaker-ben.

A Sprite-ok közül nyissuk meg a spr_player tulajdonságait és kattintsunk a Load Sprite gombra.


A mejelenő ablakban nyissuk meg a Space mappát (Alapértelmezetten a GameMaker mapában keresi a Sprite-okat)


Válasszuk ki a triangle.png fájlt és kattintsunk a Megnyitás gombra.


Kattintsunk az Edit Sprite gombra, hogy szerkeszthessük a képet.


A fenti menüből válasszuk a Transform menüpontot.


Azonelül a Rotate... lehetőséget.


90° -kal szeretnénk jobbra forgatni a Sprite-ot, ehhez csak meg kell nyomnunk az OK gombot.


A pipára kattintva zárjuk be a szerkesztőt.


Kattintsunk a Center gombra, hogy beállítsuk a Sprite középpontját. (Ekörül a pont körül fog forogni.) Ezután az OK gombra kattintva zárjuk be a spr_player tulajdonságait.


Nyissuk meg az Object-ek közül az obj_player tulajdonságait.


Oldalt kattintsunk a control gombra, ezzel tudunk átváltani egy másik Action fülre.


Húzzunk egy Set Variable Action-t a Step menübe.


A variable részbe írjuk be az image_angle parancsot. (Ez a játékban a kép iránya.) A value részhez pedig a direction parancsot. (Ezzel az Action-nal egyenlővé tettük a kép irányát a haladási iránnyal.) 

Ezután mentsük el a játékot és futtassuk. A háromszög mindig a haladási iránnyal megeggyező irányba fog mutatni.


Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik. 

2011. június 9., csütörtök

GameMaker - 5. lecke

Ebben a leckében tovább fojtatjuk az első játékot... Ha már megint letörölted/nem mentetted el/mag se csináltad akkor itt letöltheted a forráskódot.

Elsőként nyissuk meg GameMaker-ben az Első játékom.gm81 fájlt. Ezután az Object-ek közül nyissuk meg az obj_player tulajdonságait.


Itt immár öt Event-et találunk (négy Keyboard és egy Outside Rooms) 


Hozzunk létre egy új Event-et. Ehhez kattintsunk az Add Event gombra.


Válasszuk a Step gombot, azon belül a legördülő menüben a Step lehetősget. A Step Event egy olyan esemény amely megtörténik minden egyes képfrissítéskor. Ha a Begin Step lehetőséget választanánk akkor minden frissítés előtt vizsgálná, End Step esetén utána. (A GameMaker-ben a képfrissítéseket Step-nek hívjuk.)


Válasszuk a Set Friction funkciót a jobboldali oldalsávból, húzzuk az Actions ablakrészbe.


A Friction Action lényegileg a fizikában vett súrlódásnak felel meg. A friction mezőbe írjun 0.1-et (írhatunk bármilyen 1 alatti számot, minél nagyobb annál erősebb lesz a súrlódás) Kattintsunk az OK gombra, ha végeztünk a friction megadásával. 
Ezután mentsük el a játékot és futtassuk az F5 gomb megnyomásával. Ha mindent jól csináltunk akkor ugyanúgy irányíthatjuk a smile-nkat, de amikor felengedjük az összes nyilat, akkor a karakter lelassul, majd teljesen megáll.

Ha bármi problémád akad, vagy kérdésed van az Kapcsolatfelvétel oldalon megtalálod az elérhetőségeimet.

Itt letöltheted a példafájlt melyet elkészítettünk ebben a leckében.

Jó szorakozást a GameMaker-hez, a következő lecke hamarosan érkezik.