Diskuze: Přednost mají cykly

Ostatní jazyky GameMaker GameMaker Přednost mají cykly

Avatar
matesax
Redaktor
Avatar
matesax:

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
Redaktor
Avatar
Odpovídá na matesax
Kit:

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  +1 24.6.2012 10:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na matesax
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:

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
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:

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
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:

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
Odpovídá na matesax
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:

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
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:

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
Odpovídá na matesax
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík [sczdavos]
matesax:

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:

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:

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.