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í.
Avatar
matesax
Tvůrce
Avatar
matesax:24.6.2012 10:14

Dobrý den,
mám tento kód:

 if (Pausa.visible == false)
Pausa.visible = true;
else
Pausa.visible = false;

keyboard_clear(ord("P"));

while (Pausa.visible == true)
{
sleep(50)

if (keyboard_check(ord("P")))
Pausa.visible = false;
}

A prvně se vykoná cyklus, pro což absolutně nemám pochopení,... (Samozřejmě ne proto, v jakém pořadí to mám napsané...). Ale potřebuji to naopak - prvně zkontrolovat viditelnost a až pak konat cyklus - jak na to? Děkuji.

 
Odpovědět
24.6.2012 10:14
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:24.6.2012 10:56

A tohle je co za zrůdu?

if (Pausa.visible == false)
Pausa.visible = true;
else
Pausa.visible = false;

Máš snad něco proti tomuto zápisu?

Pausa.visible = ! Pausa.visible;
Nahoru Odpovědět
24.6.2012 10:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na matesax
David Jančík:24.6.2012 11:02

Ahoj,
nejspíš proto, že se ten kód přímo ve hře aplikuje až po provedení celého bloku.
Tj. ty sice změníš viditelnost ale objekt ji má stále původní.
Ten kód moc nechápu.

Stačilo by něco jako:

pause = true;

while (pause) {

draw_text(10,10, "Pause")

screen_refresh()

sleep(500)

pause = !keyboard_check_direct(ord("P"))

}

Nebo nejjednodušeji zobrazit message. To hru taky pauzne.

Já předtím myslel, že děláš v C# a ty ses dal na GM, takže jsem odpověděl na něco jiného pak jsem si toho všiml tam jsem to přepsal.

Nahoru Odpovědět
24.6.2012 11:02
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:24.6.2012 11:02

A co je špatně na mém zápisu? - ano kód má byt co nejmenší, ale toto stejně můj problém neřeší,...

 
Nahoru Odpovědět
24.6.2012 11:02
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:24.6.2012 11:04

Já bych dělal raději v XNA, ale neš do toho proniknu, uspokojím se s GM - jen dočasně,...

 
Nahoru Odpovědět
24.6.2012 11:04
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:24.6.2012 11:06

neš = než :)
Chtěl jsem udělat pěkný barevný a s hezkým fontem nápis - Pauza. Pro pokračování stiskněte ... Tak jsem to dal do objektu...

 
Nahoru Odpovědět
24.6.2012 11:06
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na matesax
David Jančík:24.6.2012 11:07

Kit ti chtěl říct že

!true == false

Na XNA tu v nejbližší době přibudou tutoriály ;)

Nahoru Odpovědět
24.6.2012 11:07
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:24.6.2012 11:09

Když použiješ kratší zápis, snáze v něm najdeš logickou chybu. Když jsem si ten tvůj příklad přepsal do kratší formy, uviděl jsem ji hned.

Vím, že dnes se tolik nehledí na rychlost aplikací, můžou být i líné, ale pokud kratší a přehlednější zápis vygeneruje efektivnější kód, tak proč toho nevyužít? I kdyby to efektivnější nebylo, smysl to má.

Nahoru Odpovědět
24.6.2012 11:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:24.6.2012 11:11

Když jsem u toho nápisu - u objektů je v GM možnost Persistent - prvně jsem to pochopil tak, že pokud budu chtít mít třeba menu v každé místnosti, tak ho dám jednou a na toto kliknu - ale nic. Takže pokud bych měl do každé místnoti strkat ten nápis, tak to opravdu udělám přes dialog,...

 
Nahoru Odpovědět
24.6.2012 11:11
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na matesax
David Jančík:24.6.2012 11:27

Měl bys mít nějaký objekt controler, který bude persistent - to znamená, že je trvalý. Ten bude kontrolovat hru, spravovat tu pauzi etc...
Je to popsáno i v sekci GameMaker.

Nahoru Odpovědět
24.6.2012 11:27
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:24.6.2012 11:28

Tak mám problém i se zprávou. :) Pořád se spouští dokola - přitom jsem použil vyčištění klávesy P. KDyž pod zprávu dám třeba restartovat místnost, nebo ukončit, tak je to OK - já bych to ale rád beze změn. :)

 
Nahoru Odpovědět
24.6.2012 11:28
Avatar
ereg
Člen
Avatar
ereg:25.6.2012 23:36

nechtel jsi aby to fungovalo takto?
kod umisti do stepu

 // deaktivace pauzy libovolnou klavesou a zviditelneni objektu
if (Pausa.visible == false){
    keyboard_wait();
    Pausa.visible = true;
 }
// aktivace pauzy levym tl.mysi nebo si zmen na neco jineho
if mouse_check_button_released(mb_left) {Pausa.visible=false;}
 
Nahoru Odpovědět
25.6.2012 23:36
Avatar
chylex
Člen
Avatar
chylex:5.7.2012 15:53

keyboard_check reaguje na držení klávesy, použij místo toho keyboard_chec­k_pressed ;)

 
Nahoru Odpovědět
5.7.2012 15:53
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 13 zpráv z 13.