Odchycení objektů do proměnných při akci na základě proměnných

Pokud si nevíte s něčím rady ohledně tvorby v Game Makeru - pište sem!
Odpovědět
bildo
Příspěvky: 142
Registrován: srpen 6, 2011, 7:30 am

Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od bildo » březen 18, 2017, 6:02 pm

Mám objekt hráče. Při kolizi s objekty zbraně si chci do proměnných vložit konkrétní instance objektů na základě proměnných.
Parent zbraně má proměnnou poloha, a ta může nabývat tří hodnot:
1- na zemi, 2- v ruce hráče, 3- na zádech hráče.
Jak napsat script, který mi to "odchytne" ...V GM jsem už dlouho nedělal, tak nevím. :(
Zkouším všechno možné, ale nic nefunguje. Teď to píšu takhle, ale nefunguje to.

Kód: Vybrat vše

with(ob_zbran){	
	if (poloha==1)&&(place_meeting(x,y,ob_player)){
		zemzbran = ob_zbran  // NEFUNGUJE
		if ( zadazbran.jmenozbrane == "samopal" ) { show_message(" Funguje to ! ") }  // zakonite to nefunguje.  :( 
		show_message("ZEM")
	}
	if (poloha==2)&&(place_meeting(x,y,ob_player)){
		rukazbran = ob_zbran // NEFUNGUJE
		show_message("RUKA")
	}
	if (poloha==3)&&(place_meeting(x,y,ob_player)){
		zadazbran = ob_zbran // NEFUNGUJE
		show_message("ZADA")
	}
}
Do proměnné nedostanu instanci.
A právě to potřebuji. :)

Ten script to musí umět udělat "najednou".
Mám jednu zbraň v ruce, druhou na zádech, a použiji ho třeba , i když se přiblížím k zbrani, která je na zemi.
Obrázek

Goblin
Příspěvky: 134
Registrován: červenec 2, 2014, 2:42 pm

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od Goblin » březen 19, 2017, 3:34 pm

Do proměnné nesmíš ukládat ob_zbran, ale id instance ob_zbran. Nejsem si úplně jistý o co se pokoušíš, ale tohle bude chyba, kterou při tom děláš. :)
"Understanding is not required. Only obedience."

bildo
Příspěvky: 142
Registrován: srpen 6, 2011, 7:30 am

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od bildo » březen 19, 2017, 6:04 pm

Jj, tomu rozumím, ale jak přesně "chytnu" to id objektu ?

Včera jsem ještě při pokusech zkusil "self" a vypadá to, že to funguje. Ale neměl jsem moc času, tak jsem to pořádně neprozkoumal.

Jedná se mi o to, že hráč přijde třeba k položenému objektu pistole. V ruce má třeba samopal, na zádech plamenomet.
Tenhle script má právě za úkol zjistit, a do proměnných uložit, ty konkrétní instance zbraní pro nějakou další interakci. Položení zbraně, přeložení zbraně z rukou na záda, ....a tak .
Obrázek

Goblin
Příspěvky: 134
Registrován: červenec 2, 2014, 2:42 pm

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od Goblin » březen 19, 2017, 6:36 pm

Dobře, zkusím to implementovat přímo do tvého kódu,ok? Předpokládám, že jej spouštíš z objektu hráče a ukládat chceš odkazy do JEHO proměnných, proto na ta místa přidám other. id je zabudovaná proměnná, která je unikátním identifikátorem každé instance, proto uvnitř bloku "with ob_zbran" to stačí udělat nějak takhle:

Kód: Vybrat vše

with(ob_zbran){	
	if (poloha==1)&&(place_meeting(x,y,ob_player)){
		other.zemzbran = id  //jsme stále uvnitř bloku, takže id je id instance zbraně a other. poukazuje vně bloku, nejspíš k hráči
		if ( zadazbran.jmenozbrane == "samopal" ) { show_message(" Funguje to ! ") }  // zakonite to nefunguje.  :( 
		show_message("ZEM")
	}
	if (poloha==2)&&(place_meeting(x,y,ob_player)){
		other.rukazbran = id // taktéž
		show_message("RUKA")
	}
	if (poloha==3)&&(place_meeting(x,y,ob_player)){
		other.zadazbran = id 
		show_message("ZADA")
	}
}
Tohle ti funguje?

Aby ssebou objekt hráče tahal zbraně jako další objekty mi přijde jako dost neelegantní způsob, který může působit komplikace. Lepší je mít pro zbraň zvláštní objekt jen tehdy, když se válí na zemi. Jak k ní hráč přijde, sebere ji tak, že si zapíše všechna její data (obrázek, zvukový efekt, šablonu útoku, míra a druh poškození apod.) a objekt "válející se zbraně" zničí. Když ji pak nese, vykresluje objekt hráče kromě sebe i obrázek zbraně v ruce nebo obrázek zbraně na zádech. Když zaútočíš, přečteš si z arraye Jaké efekty má vytvořit a které objekty a jak zranit, případně jaké vytvořit projektily. Když zbraň položíš, opět vytvoříš objekt "válející se zbraně", array příslušné zbraně do něj zapíšeš a smažeš ho z instance hráče.
"Understanding is not required. Only obedience."

bildo
Příspěvky: 142
Registrován: srpen 6, 2011, 7:30 am

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od bildo » březen 20, 2017, 12:14 am

Goblin píše:
březen 19, 2017, 6:36 pm

Kód: Vybrat vše

with(ob_zbran){	
	if (poloha==1)&&(place_meeting(x,y,ob_player)){
		other.zemzbran = id  //jsme stále uvnitř bloku, takže id je id instance zbraně a other. poukazuje vně bloku, nejspíš k hráči
		if ( zadazbran.jmenozbrane == "samopal" ) { show_message(" Funguje to ! ") }  // zakonite to nefunguje.  :( 
		show_message("ZEM")
	}
	if (poloha==2)&&(place_meeting(x,y,ob_player)){
		other.rukazbran = id // taktéž
		show_message("RUKA")
	}
	if (poloha==3)&&(place_meeting(x,y,ob_player)){
		other.zadazbran = id 
		show_message("ZADA")
	}
}
Tohle ti funguje?
Super, díky. Ano, funguje.

Jj, už mi radili, že si mám ty nesené zbraně zapisovat spíš do proměnných, nebo pole, ale s tím polem jsem nikdy nějak nedělal.
Jak to jednoduše udělat?

Předpokládám, že to bude dvourozměrné pole, první "rozměr" bude typ proměnné a druhý"rozměr" bude hodnota, že jo ?
Já bych zase na základě přepínání zbraně ( ruka / záda ) musel chytře přepínat načítaní proměnných z různých řádků v poli. A nebo všechny hodnoty v poli na základě té konkrétní zbraně přepisovat.
Právě proto mi to přišlo přes ty "instance" jednodušší.

Ale asi by šlo těch polí mít víc (pro každý typ zbraně jedno), a na základě "ty právě brané a ničené zbraně" si to zapsat do toho konkrétního pole podle typu zbraně.

Edit.
Aha, tak to, co myslím je ds_list. :) :) Array je úplně v pohodě. :D :)
Obrázek

Goblin
Příspěvky: 134
Registrován: červenec 2, 2014, 2:42 pm

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od Goblin » březen 20, 2017, 9:03 am

Ukládat si přímo do tabulky typy hodnot nemá smysl. K orientaci v tabulkách nejlépe poslouží enumerátory.

V tvém (a mnoha dalších případech) je podle mě nejlepší mít jedinou tabulku (pole) pro všechny zbraně ve hře, která je globální proměnnou a čteš z ní cokoliv potřebuješ. Každý řádek představuje jednu zbraň, každý sloupec pak jednu hodnotu, jako sprite/damage/kadence/metoda střelby apod. Výhodou je, že pak nemusíš operovat s tolika poli, jejich kopírováním a přepisováním, protože každou zbraň je možné vyjádřit jedním číslem (číslem řádku, ze kterého se má v tabulce zbraní číst).

Nevýhodou je pevně daný počet zbraní ve hře, ale hádám, že u procedurálního generování obsahu ještě nejsi. :)

Vytvořil jsem jednoduchý prototyp prakticky bez fyziky. To, co jsme tu řešili najdeš ve skriptu jménem scr_pick_swap a scr_drop_weapon. Je tam i jednoduchý systém střílení, který ukazuje jak číst z tabulky metodu střelby a různé objekty projektilů (nebýt plamenometu, stačilo by mít jediný objekt projektilu a měnit mu jen sprite). Stiskni Q pro zvednutí/výměnu zbraně. E pro položení aktuální zbraně nebo zbraně na zádech, pokud v ruce žádná není...

https://www.dropbox.com/s/hy72b496ddceu ... o.gmz?dl=0
"Understanding is not required. Only obedience."

bildo
Příspěvky: 142
Registrován: srpen 6, 2011, 7:30 am

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od bildo » březen 22, 2017, 7:50 pm

Ahoj. Dík moc za pěkný příklad.

Ale je tam hromada skriptů(furt se někde skáče, nebo mi to tak aspoň přijde), přiznám se, že se v tom trošku ztrácím. Je ale pravda, že jsem to zase až tak detailně nezkoumal.
Tak jak jsi mi poradil prve. To přiřazení přes"id", je pro mě mnohem přehlednější.
Mám proměnnou přímo objekt. A úplně jednoduše přistupuji na jeho proměnné.
Ale vím, že programátorky je správně přes to pole (tabulku). Ale jak říkám, mi to přes tu hromadu kraťoučkých skriptů přijde nepřehledné.
Jde určitě o zvyk.
Obrázek

Goblin
Příspěvky: 134
Registrován: červenec 2, 2014, 2:42 pm

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od Goblin » březen 22, 2017, 11:31 pm

Ono to může vypadat trochu složitě, ale to je i proto, že nic nepíšu přímo do událostí objektů, ale každý objekt má svůj skript pojmenovaný ve stylu "scr_oJmenoObjektuCreate", ve kterém se to potom líp dohledá. Zkus si projít skript scr_weapons_ini ve složce engine. Ten je vlastně jádrem celé ukázky a scr_weapons_enum, který je do něj vnořený má myslím dost popisků, aby sis z toho něco odnesl (ale můžu klidně nějaké přidat: jestli máš k tomu projektu nějaké konkrétní připomínky, myslím že se dá komentář napsat přímo v tom linku v dropboxu)...

Jak je to "programátorsky správně", opravdu nevím. Není to můj obor. Ale vím, že takhle můžu napsáním pěti řádků do hry přidat další zbraň, nebo jejich vlastnosti ladit tak, abych se pak nemusel přehrabovat v událostech bazilionu objektů. :)

Každopádně hodně štěstí při vývoji. A pochlub se brzy prototypem. :D
"Understanding is not required. Only obedience."

bildo
Příspěvky: 142
Registrován: srpen 6, 2011, 7:30 am

Re: Odchycení objektů do proměnných při akci na základě proměnných

Příspěvek od bildo » březen 23, 2017, 5:43 pm

JJ, to určitě. Mě napadlo, že bych si ty skripty vložil přímo do eventů objektu. Pro větší přehled.
Protože , když je otevírám, tak jsou krátké. A opticky bych to měl pěkně "na voku". :D
Obrázek

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host