inventář aneb jak jsem to řešil já. (psaný tut)

Sem vkládejte editovatelné kusy kódu a tutoriály.
Odpovědět
Uživatelský avatar
digital art
Příspěvky: 111
Registrován: srpen 6, 2011, 12:51 am
Facebook: http://facebook.com/

inventář aneb jak jsem to řešil já. (psaný tut)

Příspěvek od digital art » duben 30, 2012, 12:33 pm

dravím. Rozhodl jsem se ukázat vám mé řešení inventáře. Informace tu sbírám pořád tak se taky musím o neco podělit.

vytvoříme obrázek s názvem invy_empty (pokud bude slot v inventáři prázdný vykreslí se právě tento sprit)

1: obekt kontrolující inventář (nejlépe je ho umístit hned někam na začátek hry např do menu,není solid ani visible)

create event:

Kód: Vybrat vše

global.slot_a=invy_empty;
global.draw_slot_a=invy_empty;

global.slot_b=invy_empty;
global.draw_slot_b=invy_empty;

global.slot_c=invy_empty;
global.draw_slot_c=invy_empty;

global.slot_x=invy_empty // slot inventáře x 
global.draw_slot_x=invy_empty;// údaj pro vykreslení slotu x

může být rozšířeno o více údajů.např textury atd.

global.draw_slot_texture_x=invy_empty.
poté si vytvoříme objekt,třeba meč (sword)

create event:

Kód: Vybrat vše

idd=sword //id musí být stejné jako název
draw_idd=sword_sprite //název spritu jež se nám bude vykreslovat,buď v inventáři a nebo v roomu
texture_idd=sword_texture//rozšiřujicí údaj,textura
pokud ho budeme chtít sebrat např kolizí s obj hráč,v oběktu meč dáme kolize s oběktem hráč a do kódu:

Kód: Vybrat vše

if global.slot_a = invy_empty 			//pokud je slot a inventáře prázdny 
{
 global.slot_a=idd;           			// slot získa id obektu(zde tedy sword)
 global.draw_slot_a=draw_idd; 			// vykreslovací slot získa id obektu(zde tedy sword_sprite)
global.draw_slot_texture_a=texture_idd.		//sem by přišel i rozšiřující kód
  instance_destroy() 	      			//zničí oběkt meč
} else                       			 //pokud bude slot a plny přeskočí na slot b atd. 


if global.slot_b = invy_empty 
{
 global.slot_b=idd;
 global.draw_slot_b=draw_idd;
  instance_destroy() 
} else 


if global.slot_c = invy_empty 
{
 global.slot_c=idd;
 global.draw_slot_c=draw_idd;
  instance_destroy()        //bude li inventář plný nic se nestane a meč neseberete.
}
toto je kód který vyhodí předmět z inventáře,přímo ze slotu /a/ může být použit v oběktu hráč,vykreslovač inventáře
nebo v jakémkoliv jiném oběktu ktery je v každém roomu

Kód: Vybrat vše

if !(global.slot_a=invy_empty) //pokud slot /a/ neni invy_emty(tedy prázdný)
{
instance_create(player_online.x-16,player_online.y-16,global.slot_a)  //vytvoří obekt s příslušným idd(my máme sword)
global.slot_a=invy_empty      //vyčistí nám  slot
global.draw_slot_a=invy_empty //vyčistí nám vykreslovací slot
global.draw_slot_texture_x=invy_empty.//vyčistí nám rozšiřující vykreslovací slot
}
jako poslední je vykreslení inventáře,stačí vykreslovat global.draw_slot_a (v našem případě až c)
stějne tak jde pracovat se všemi globálními,takto je zaručen přechod objektu v inventáři i do jiných roomu a také snadné vytváření
obektu které se jen skopírují a v create eventu se přepíšou idd dle libosti.

NicharCZ: Dlouhé kódy do

Kód: Vybrat vše

. Sedm řádků jako odsazení vidím prvně..[/color][/b]

Trip
Příspěvky: 46
Registrován: duben 21, 2012, 9:45 pm

Re: inventář aneb jak jsem to řešil já. (psaný tut)

Příspěvek od Trip » duben 30, 2012, 1:16 pm

Čau,
kód jsem zběžně prolétl a mám pár připomínek. Není to nic hrozného, ale k "úpravě" příspěvku přispěje, když zaprvé kódy dáš do bloku

Kód: Vybrat vše

[/pre] a kratší, například názvy eventů, objektů a tak do [pre][pre][/pre]. A nakonec, máš tam strašnou spoustu překlepů, například "obekt", "oběkt" je správně "objekt".
Jinak docela dobrý tutoriál :).

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: inventář aneb jak jsem to řešil já. (psaný tut)

Příspěvek od D-Sheep » květen 1, 2012, 9:09 pm

Proboha. :roll: Tohle není řešení inventáře, o to jsi se s náma nemusel vůbec dělit. Řekněme, že chceš inventář se 100 sloty, chtělo by se ti to psát ? Bohužel se mi jednoho času dostala do rukou úprava kódu jednoho "programátora" a z 390 řádků kvůli devíti slotům jsem byl na mrtvici. Nauč se používat pole, cykly a datový struktury (v GM např. ds_map) a uvidíš, jak je tohle, co jsi předvedl, blbý.

Inventáře nejsou jen o obsazování nějakých políček, důležitá je i práce s nimi - přehazování obsahů, stackování, slučování.. Tímhle by to opravdu nešlo.

Uživatelský avatar
digital art
Příspěvky: 111
Registrován: srpen 6, 2011, 12:51 am
Facebook: http://facebook.com/

Re: inventář aneb jak jsem to řešil já. (psaný tut)

Příspěvek od digital art » květen 1, 2012, 11:07 pm

NicharCZ: Díky za ůpravu příspěvku,na vch nejsem dlouho a s úpravou textu jsem na tom ze.


D-Sheep:Já se k práci s cykly teprve dostavám ,a v mé hře jsem takto inventář napsal. Tobě to třeba nepomůže ale určitě je zde spousta lidí kteří se tak jako já gml učí a tohle mi přišlo na pár slotú jednoduché.Je to hlavně cvičení s globálními a kód je tak snadno použitelný protože neobsahuje nic složitého.

ereg
Příspěvky: 500
Registrován: únor 18, 2012, 11:30 am
Facebook: http://facebook.com/

Re: inventář aneb jak jsem to řešil já. (psaný tut)

Příspěvek od ereg » květen 2, 2012, 1:45 am

takze. pokud by nekdo zacinal s inventarem...
zkus si prohlednout a porovnat tento kod. upravoval jsem ho pro potreby dotazu a lze na nem mnoho jeste vylepsit.
Hlavni je, ze krasne ukaze jak par cyklu nikoho nezabije.
nepouzit cykly( i kdyz je prozatim nekdo neumi) je jako stavet barak a misto oken planovat same dvere ;)

mimochodem pro uplne zacatecniky by se hodil prilozit funkcni GMK, jinak budou stejne badat kde co napsat/udelat.
Pokud se vám něco na fóru nelíbí, zkuste si přečíst třeba Wikietiketu a svou kritiku pišete podle ní.

Odpovědět

Kdo je online

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