Diskuze: Game maker - náhodné vygenerování (diplomová práce)
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Dělat to ikonama asi moc nepůjde. A když, tak strašně složitě.
Už teď je to nepřehledné a spousta objektů. Normálně se používá
položka parent a zvolí se objekt, který definuje chování
společné pro všechny. Místo šedesáti objektů pak klikáš jeden.
Ale nevadí.
Pozor, následující text je určen k prostudování a pochopení, ne k bezhlavému opsání.
Generovat náhodně slova ze seznamu je celkem jednoduchá věc. V objektu generator_slov dáš ikonu volně psaného kódu a napíšeš něco jako tohle:
///poloha pri vytvoreni
var n;
n=0; //počitadlo objektu
n+=1; a[n]=jedna; //kazdy objekt se ulozi v poli **a** v poradi **n**
n+=1; a[n]=dva;
//dopsat až do konce;
nahodny_objekt=a[irandom_range(1,n)]; //vybere se nahodne jeden z nich
with(instance_create(0,0,nahodny_objekt)) //vlozi se do mistnosti na pozici 0,0
{
x=irandom_range(48,1296-sprite_width); //a ihned se premisti na pozici mezi hornim levym
y=irandom_range(64,576-sprite_height); //a dolnim pravym koncem herniho pole
move_snap(16,16); //zarovnani do mrizky by asi ani nebylo treba, slova jsou dost velka pro kolizi
}
Slovo se při kontaktu s čímkoli může snadno zapsat do seznamu velice
podobným způsobem jako se z něj vytvořilo. Aby objekt nezmizel při
opuštění místnosti, musí mít zapnutou vlastnost persistent. Pokud se takto
použije generator_slov, vypadalo by to nějak takto:
( pro změnu proměnné v jiném objektu se použije tečka:
objekt.promenna=cislo; )
///kod v objektu generator_slov, event create
pocet_chycenych_slov=0;
///kod v objektu slovo, event kolize s hracem
generator_slov.pocet_chycenych_slov+=1;
generator_slov.b[generator_slov.pocet_chycenych_slov]=object_index;
Nepřátelé jsou svým způsobem podobní hráči, jen bych řekl, že jsou jednodušší .Při kolizi slova s nepřítelem stačí asi slovo zničit. Pak teoreticky asi ještě způsobit vygenerování dalšího slova.
//doporucuji dat kod generovani slov do uzivatelskeho eventu 1 ( zeleny kosoctverec )
with(generator_slov) event_user(1);
instance_destroy();
Mockrát děkuji za pomoc, s mnoho věcmi mi to pomohlo. Jenom jsem nepochopila tu poslední část a kód se "zeleným kosočtvercem".
____Nevím co přesně dělá uživatelský event______
//doporucuji dat kod generovani slov do uzivatelskeho eventu 1 ( zeleny
kosoctverec )
with(generator_slov) event_user(1);
instance_destroy();
__________________________________________
Dále by mě zajímala varianta s položkou "parent". Položku parent jsem nalezla, ale nepochopila jsem pořád její využití, jak to napárovat na všech 60 slov, bez toho aby to byli jednotlivé objekty.
3. Problém: U nepřátel (počítač) bych potřebovala nastavit, aby se pohybovali ke slovům. Jakmile by se slovo vygenerovalo, tak k dané pozici by v tu chvíli směřoval i nepřítel.
Mohla bych poprosit o další pomoc a nějaké vysvětlení? Předem mockrát
děkuji.
Tak dědičnost jsem už pochopila.
Vytvořila jsem si objekt "slovo" a na všech slovech jsem poté nastavila
parent (dědičnost) na objekt "slovo".
Dobrá práce. Málo lidí čte, přemýšlí a píše ( v tomto uvedeném pořadí).
Uživatelský event je sice podobný těm ostatním ( step, create... ), ale nenastává sám. Prostě čeká, až ho někde něco spustí. Je to dobré jen pro přehlednost. Pomocí event_perform se dá spustit jakýkoli event - třeba umělý klik myší. Jsou ale i další možnosti. Když se má nějaká činnost opakovat, lze ji uložit jako skript a pak spouštět libovolně.
Pokud má generátor slov umět generovat slova, může to mít právě v
uživatelském eventu. Ale vzhledem k rychlosti chápání, bych doporučil
zkusit ty skripty. Je to snadné a skvělé.
Klikne se na Create script a v textovém poli Name se pojmenuje. Do prázdného
textového pole se dá napsat cokoli, co se má dít a pak to mohou různé
objekty opakovat. Příklad je vidět na obrázku v příloze. Takový skript by
se pak spouštěl napsáním jeho názvu a kulatých závorek. Např:
vytvor_slovo()
Když se mají nepřátelé pohybovat ke slovu, je to celkem snadné. Slovo
má polohu xy uloženu ve svých proměnných, takže slovo.x a slovo.y
Nepřítel prostě posune své souřadnice xy směrem k souřadnicím slova.
Něco jako toto:
x+=sign(slovo.x-x); //sign zaridi, aby posun byl prave o +1, 0, -1
y+=sign(slovo.y-y);
Tyto výpočty posunou objekt, v němž jsou provedeny směrem k poloze slova.
Zobrazeno 5 zpráv z 5.