IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Tutoriál na tvorbu 3D stříleček 6 - Přidáváme nepřátele

(Napsal Mark Overmars - (C) YoYo Games Ltd, pro itnetwork.cz přeložil sdraco)

Je sice hezké, že umíme střílet barely, ale to není tak zábavné. Budeme potřebovat nějaké nepřátele. V tomto tutoriálu přidáme jen jeden typ příšery, ale jakmile porozumíte tomu, jak to funguje, je snadné přidat další. Pro příšeru potřebujeme 2 animované sprity, jeden když je naživu a druhý když umírá. Oba si stáhneme ze stránky o Doomu, která byla zmíněna minule. Také budeme potřebovat sprite, který bude reprezentovat příšeru v roomu a bude použit k detekci kolize.

Vytvoříme 2 objekty, jeden pro živou příšeru a druhý pro příšeru, když umírá. Když příšera umírá, vytvoříme na její pozici objekt umírající příšery. Funguje to úplně stejně, jako u barelu. Je tu jen jediný rozdíl. Na konci animace mrtvou příšeru nezničíme, ale necháme jí tam ležet, jen se zobrazením posledního podobrázku z animace. Za tímto účelem v události Animation end přidáme akci Change sprite a nastavíme správný podobrázek(7) a rychlost na 0.

Abychom mohli příšery střílet, můžeme použít tu samou techniku jako u sudů. Ale musíme udělat několik změn. Jako první nechceme, aby byly příšery potomky objektu basic wall. Dělalo by to problémy, když se budou pohybovat. Proto vytvoříme nový objekt obj_monster_ba­sic. To bude parrent objekt pro všechny příšery (i přesto, že nyní máme jen jednu). Druhá změna je, že budeme chtít střílet přes rostliny. Proto vytvoříme objekt basic plant. (Objekt basic plant bude mít jako parrent basic wall, protože nechceme, aby se přes rostliny dalo chodit). Střílející kód je nyní doplněn a vypadá následovně:

{
  var xx, yy, dx, dy, ii;
  xx = obj_player.x;
  yy = obj_player.y;
  dx = 4*cos(obj_player.direction*pi/180);
  dy = -4*sin(obj_player.direction*pi/180);
  repeat (50)
  {
    xx += dx;
    yy += dy;
    ii = instance_position(xx,yy,obj_wall_basic);
    if (ii == noone)
    {
      ii = instance_position(xx,yy,obj_monster_basic);
      if (ii == noone) continue;
      with (ii) instance_destroy();
      break;
    }
    if object_is_ancestor(ii.object_index,obj_plant_basic) continue;
    if (ii.object_index == obj_barrel)
       with (ii) instance_destroy();
    break;
  }
}

Je to z velké části totožné s minulým kódem. Nejprve zjistíme, zda je zeď zasažena. Pokud ne, zjistíme, zda je zasažena příšera a pokud ano, zničíme ji. Pokud byla zasažena zeď, zjistíme, zda se jedná o instanci rostliny a pokud ano, můžeme pokračovat (střela proletí rostlinou).

(Funkce object_is_ances­tor(obj1, obj2) nám zodpoví, zda je obj2 předek obj2, tedy jeho parrent). Když střelíme do barelu, necháme ho explodovat. Hru naleznete v souboru fps5.gmk.

Poslední věcí je, aby příšera napadala hráče. Tato příšera nebude střílet, ale jednoduše procházet hráčem. Když se hráče dotkne, ztratí nějaký život. Jak jistě víte, mechnismus života je v Game Makeru zabudován. V události Create nastavíme health na 100. V objektu pistole, který také funguje pro kreslení přes herní scénu, můžeme vykreslit health bar, trochu průhledný, jak naznačuje následující kód:

draw_set_alpha(0.4); draw_healthbar(5,460,100,475,health,c_black,c_red,c_lime,0,true,true);
draw_set_alpha(1);

A v události No More Health hru jednoduše restartujeme (je to trochu nudné, popřemýšlejte do budoucna nad něčím lepším).

Aby příšera na hráče útočila, vložíme do objektu příšery do události Begin step následující kód:

{
  if (point_distance(x,y,obj_player.x,obj_player.y) > 200)
    { speed = 0; exit; }
  if (collision_line(x,y, obj_player.x,obj_player.y,
                                obj_wall_basic,false,false))
    { speed = 0; exit; }
  if (point_distance(x,y, obj_player.x,obj_player.y) < 12)
  {
    speed = 0; health -= 2;
    if not sound_isplaying(snd_ow) sound_play(snd_ow);
    exit;
  }
  move_towards_point(obj_player.x,obj_player.y,1.4);
}

Ten vykoná následující: Pokud je vzdálenost od příšery k hráči příliš vysoká, neuděláme nic a jednoduše nastavíme rychlost na 0. Pokud příšera hráče nevidí (čára od ní k hráči koliduje se zdí), také neuděláme nic. Příšera pronásleduje hráče jen tehdy, když ho vidí. Pokud je vzdálenost menší než 12, bereme to jako že na hráče útočí a začneme snižovat jeho život a přehrajeme zvuk. Jinak se přibližujeme k hráči zvolenou rychlostí. (Všimněte si, že bychom mohli první test vynechat, ale funkce pro test kolize s čárou je docela pomalá, proto ji budeme provádět jen tehdy, když je příšera blízko). Aby se příšera vyhýbala zdem, může využít ten samý zklouzávací mechanismus, jako má hráč. (Vlastně to dáme do basic monster, protože to bude pro všechny příšery stejné).

Nyní stačí umístit několik příšer na důležitá místa ve hře a jsem hotoví. Naše první 3D střílečka je téměř hotová. Hru naleznete níže v souboru fps5.gmk. Určitě byste měli vytvořit východ do další místnosti, který bude hlídán příšerami. A také vytvořit další místnosti. Také byste měli vytvořit nějaké další příšery a přidat do světa nějaké další předměty, jako je např. balíček s životem. Dále byste mohli přidat příšeře život, aby bylo potřeba více ran a možná najít lepší zbraně a munici. Rozšíření je jen na vás. Nějaké základní nápady na vylepšení si probereme příště.

Střílení příšer - GameMaker - 3D hry

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 418x (501.86 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

Všechny články v sekci
GameMaker - 3D hry
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
2 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity