Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Diskuze: Tower defence-otáčení věže za cílem

V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
LakkyNorris
Člen
Avatar
Odpovídá na TomBen
LakkyNorris:6.9.2013 18:47

Ok, takže jsem si přečetl TBA, a pak jsem promáznul tu hru co jsem měl a napsal tam svůj kód,ale pořád mi to píše chybu, a já už nwm jak to opravit.

Určil jsem si proměnou:
terc = instance_neares­t(par_enemy.x,par_e­nemy.y,o_konec) < dosah

a pak jsem napsal kód

{{
if instance_neares­t(o_konec.x,o_ko­nec.y,par_ene­my) < dosah
cil = 1
}
if instance_neares­t(o_konec.x,o_ko­nec.y,par_ene­my) > dosah
cil = 0
{{
if cil = 0
image_angle = direction
}{
if cil = 1
image_angle = point_directi­on(x,y,terc.x,ter­c.y)
instance_crea­te(self.x,sel­f.y,o_strela)
}}}

 
Odpovědět
6.9.2013 18:47
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na LakkyNorris
TomBen:6.9.2013 20:38

No, kromě toho, že je to napsané opravdu šíleně, tak je z toho
jasné, kde sis natvořil ten error. Hned na prvním řádku. :-)

Do proměnné terc ukládáš výsledek porovnávání, tzn. že ti
nabývá hodnot true nebo false. To pak těžko můžeš použít jako
cíl střelby. Jinak když sem dáváš nějaký kód, použij ikonu
vkládání kódu. Taky je dobré vysvětlit, jaké máš objekty
a do kterého z nich ( a jakého eventu ) jsi kód napsal. Takhle
je to šeredně nečitelné.

Editováno 6.9.2013 20:39
Nahoru Odpovědět
6.9.2013 20:38
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na LakkyNorris
TomBen:6.9.2013 21:02

Jinak ten zbytek je taky špatně.
Smaž tuhle část celou a napiš ji pořádně.

Na začátku do proměnné target ulož čistě
výsledek funkce nearest_instance.
Pak spočítej vzdálenost, porovnej s povoleným dosahem
a podle výsledku porovnání vytvoř instanci střely.
Střele předáš proměnnou target, aby věděla, kam letět.
Zbav se mračna ifů a zbytečných proměnných jako je třeba cil.

Nahoru Odpovědět
6.9.2013 21:02
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
LakkyNorris
Člen
Avatar
LakkyNorris:6.9.2013 22:28

Snažil jsem se napsat ten kód (do alarmu kterej se spouští každou vteřinu) aby už byl funkční ale furt to nejde. Já jsem z toho už úplně zmatenej :)
Docílil jsem toho že ta věž furt střílí a když kolem ní projdou nepřátelé tak střílet přestane.Udělal jsem něco co jsem vůbec neměl v plánu.

{{
target = instance_nearest(o_konec.x,o_konec.y,par_enemy) < dosah
}{
if target = true
instance_create(self.x,self.y,o_strela)
image_angle = point_direction(x,y,target.x,target.y)
}{
if target = false
target = noone
image_angle = direction
}}

PS: se mnou to je asi hodně těžký co? :D

Editováno 6.9.2013 22:29
 
Nahoru Odpovědět
6.9.2013 22:28
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na LakkyNorris
Theodor Johnson:6.9.2013 22:37

instance_nearest ti nevrací vzdálenost, ale instanci, takže nemůžeš mít mít instance_nearest < dosah, musíš mít

target = instance_nearest
vzdalenost = point_distance(x,y,target.x,target.y) < dosah
Nahoru Odpovědět
6.9.2013 22:37
Mo8ilε 15 Ѐλđ
Avatar
LakkyNorris
Člen
Avatar
LakkyNorris:6.9.2013 23:19

Já nwm jak mám do toho tvýho kódu dostat objekt nepřítele(par_e­nemy).

 
Nahoru Odpovědět
6.9.2013 23:19
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na LakkyNorris
TomBen:7.9.2013 4:38

Než použiješ nějakou funkci, vždycky se podívej v helpu na její definici.
Např.:

instance_nearest(x,y,obj) Returns the id of the instance of type obj nearest to (x,y). obj can be an object or the keyword all.
  • vrací číslo instance objektu obj, která je nejblíž souřadnicím (x,y)

Takže se zamysli a sám napiš, kam patří tvůj objekt. Není to těžké.

Nahoru Odpovědět
7.9.2013 4:38
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
LakkyNorris
Člen
Avatar
Odpovídá na TomBen
LakkyNorris:7.9.2013 8:23

Já pořád nwm jak se zbavit toho erroru.

target = instance_nearest(o_konec.x,o_konec.y,par_enemy)
vzdalenost = point_distance(x,y,target.x,target.y) < dosah

A furt mi to píše že to nezná x a já nwm jak udělat aby to x znal.

 
Nahoru Odpovědět
7.9.2013 8:23
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na LakkyNorris
Theodor Johnson:7.9.2013 10:25

V čem to nezná x, v tom instance_nearest, nebo point_distance?

Nahoru Odpovědět
7.9.2013 10:25
Mo8ilε 15 Ѐλđ
Avatar
LakkyNorris
Člen
Avatar
LakkyNorris:7.9.2013 10:28

v obou. :D

 
Nahoru Odpovědět
7.9.2013 10:28
Avatar
LakkyNorris
Člen
Avatar
Odpovídá na Theodor Johnson
LakkyNorris:7.9.2013 10:31

On je problém v tom že ta věžka neví co má dělat než přijde někdo na koho bude moct střílet.(asi) :)

 
Nahoru Odpovědět
7.9.2013 10:31
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na LakkyNorris
David Hartinger:7.9.2013 10:31

Protože vůbec nechápeš co píšeš a jen hádáš a pak se divíš že to nefunguje. O tutoriály jsi předpokládám ještě ani nezavadil.

Nahoru Odpovědět
7.9.2013 10:31
New kid back on the block with a R.I.P
Avatar
LakkyNorris
Člen
Avatar
Odpovídá na David Hartinger
LakkyNorris:7.9.2013 10:42

Ale jo, četl jsem TBA.

 
Nahoru Odpovědět
7.9.2013 10:42
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na LakkyNorris
David Hartinger:7.9.2013 10:47

Nevím o tom, že by v TBA bylo GML a pokud ano, určitě by TomBen vysvětlil co je X.

Nahoru Odpovědět
7.9.2013 10:47
New kid back on the block with a R.I.P
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na LakkyNorris
TomBen:7.9.2013 15:16

Vzhledem k rychlosti za jakou jsi to přečetl je jasné, žes to jenom
proletěl očima a určitě jsi nedělal vlastní příklady a pokusy, bez kterých
to nemá ten efekt. Ale abych se vrátil k tvému problému - pokud nastává
situace, že žádní nepřátelé neexistují a tudíž věž logicky nenajde cíl,
musíš tuhle situaci vyřešit ty. Musíš zajistit, aby se netestovalo něco,
co neexistuje. Je to jedna z věcí, které musí mít programátor pořád
na paměti.

Nahoru Odpovědět
7.9.2013 15:16
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na David Hartinger
TomBen:7.9.2013 15:22

No, nějaké to GML tam přece jen je. :-)
A i když je ho tam zatím málo,
jsem si jist, že se zmiňuji i o X. :-)

Nahoru Odpovědět
7.9.2013 15:22
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 66.