Diskuze: Stisknutí klávesy 2x po sobě

Ostatní jazyky GameMaker GameMaker Stisknutí klávesy 2x po sobě

Avatar
tomasd49
Redaktor
Avatar
tomasd49:

Zdravím mám jistý animovaný gif, který by měl prvním stisknutí Shiftu zůstat nehybný (image speed = 0) ale měl by se začat pohybovat až po druhém stisknutí stejné klávesy.
Bude fungovat tento kód?:

if ((keyboard_check_pressed (vk_shift))*2 == true) //pokud je stisknutí klávesy shift dvakrát pravda
{
objekt0.image_speed = 0.1 //objekt0 bude mít rychlost obrázku 0.1
}

Ten kód jsem si jen tipnul, když jsem ho nechal zkontrolovat tak mi to sice žádnou chybu nenašlo, ale opravdu nevím jestli to bude fungovat. Stačí když napíšete jestli to bude fungovat nebo ne, jestli ne tak co na tom změnit aby to fungovalo.

Editováno 29.9.2012 10:44
 
Odpovědět 29.9.2012 10:42
Avatar
samo007
Redaktor
Avatar
Odpovídá na tomasd49
samo007:

Myslím, že ti to takto nepôjde.

Skús dať do step event toto:

 if ((keyboard_check_pressed (vk_shift)) = true) //pokud je stisknutí klávesy shift dvakrát pravda
{
if (premenna = true)
{
objekt0.image_speed = 0.1; //objekt0 bude mít rychlost obrázku 0.1
premenna = false;
}
else
{
 objekt0.image_speed = 1; //objekt0 bude mít rychlost obrázku 1
premenna = true;
}
}

A do create event daj:

premenna = true;
Editováno 29.9.2012 11:02
 
Nahoru Odpovědět 29.9.2012 11:00
Avatar
tomasd49
Redaktor
Avatar
tomasd49:

diky pochopil jsem správně že číslo 2 mám dosadit za tu premennou?

 
Nahoru Odpovědět 29.9.2012 11:36
Avatar
tomasd49
Redaktor
Avatar
tomasd49:

tu první otázku ruším, ale nechápu jaktože tvůj kód funguje přestože tam není napsané číslo 2?

Editováno 29.9.2012 11:52
 
Nahoru Odpovědět 29.9.2012 11:51
Avatar
samo007
Redaktor
Avatar
Odpovídá na tomasd49
samo007:

Ja zase nerozumiem, prečo tam máš to číslo 2. To je akoby si chcel dať, že ak sa tlačidlo stlačí 2-krát, tak sa vyhodnotí príslušný skript, ale v skutočnosti to, čo je pred dvojkou, nieje premenná, ale funkcia. Tá sa nedá násobiť. Gamemaker síce funguje inak ako iné programovacie jazyky, ale funkcie nejde počítať. Môžeš maximálne skombinovať premenné tak, že sa to bude kontrolovať súčasne a samostatne, nezávislé od seba

Editováno 29.9.2012 12:30
 
Nahoru Odpovědět 29.9.2012 12:28
Avatar
samo007
Redaktor
Avatar
Odpovídá na tomasd49
samo007:

Tá dvojka s tým nijako nesúvisí.
Ako skript funguje?

V "create event" vznikne premenna s názvom "premenna", pretože aby premenná existovala, musí mať nejakú hodnotu ( ak by bola premenná v "step event", tak by jej hodnota bola nemenná, pretože pri každom stepe hry sa tam vykoná funkcia a s ňou sa stále zadá začiatočná hodnota premennej - v tomto prípade true a animácia by išla stále rovnako)

Create event a step event idú súčasne (nezávisle od seba) a preto musí byť v "step ev." najprv funkcia (ak stlačíš shift) a až potom funkcia (ak je premenná true).
Druhá podmienka ti zisťuje, či prebieha prvá funkcia (teda ide obrázok pomaly), alebo druhá funkcia. Ak prebieha prvá funkcia, hodnota premennej sa zmení na false (false= pomaly).
Potom, pri druhom kliknutí sa hodnota nebude zhodovať s podmienkou a tak prebehne funkcia else.
Tam sa zase zmení na true a tak sa to opakuje.

Snažil som sa ti to vysvetliť laicky, a tak dúfam, že si ma pochopil :)

Ešte niečo?

 
Nahoru Odpovědět 29.9.2012 12:51
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tomasd49
David Čápka:

Nejjednodušší by bylo si tam zavést počítadlo stisků.

Nahoru Odpovědět 29.9.2012 13:11
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
TomBen
Redaktor
Avatar
TomBen:

Ten první kód byl taky skoro správně, stačí trochu upravit:

if (keyboard_check_pressed (vk_shift) == true) //je-li stisknut shift
{
//přepínat mezi speed 0 a speed 0.1
if (image_speed == 0) image_speed=0.1 else image_speed=0;
}

Akorát to spouští ve Windowsech centrum usnadnění
5x shift = funkce jedním prstem

Editováno 29.9.2012 18:23
Nahoru Odpovědět  +1 29.9.2012 18: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.
Avatar
samo007
Redaktor
Avatar
Odpovídá na TomBen
samo007:

To je dobré :D

Je to jednoduché a efektívne. Od teraz to budem používať :)

Edit: Raz som tento spôsob použil, ale akosi som naň zabudol :P

Editováno 29.9.2012 19:19
 
Nahoru Odpovědět 29.9.2012 19:17
Avatar
tomasd49
Neregistrovaný
Avatar
tomasd49:

díky za vaše odpovědi, i když ten kód od tom bena mi asi nepomůže, protože jsem potřeboval, aby od druhého stisku při každém dalším stisku byla rychlost pořád 0.1
použil jsem ten první kód od sama007.

 
Nahoru Odpovědět 1.10.2012 11:14
Avatar
tomasd49
Redaktor
Avatar
tomasd49:

A ještě jedna otázka: Lze někde najít seznam VŠECH podmínek z GM (pokud možno is nějakými vysvětlivkami)?

 
Nahoru Odpovědět 4.10.2012 18:51
Avatar
TomBen
Redaktor
Avatar
Odpovídá na tomasd49
TomBen:

Čistá podmínka je vždy if...else. Jinak skrytou podmínku obsahují různé
konstrukce jako while, for , do..until nebo switch.

Pokud ale myslíš seznam funkcí jazyka GML,
tak jsou všechny pohromadě snad jen v souboru Game_Maker.chm
Jinak je najdeš mírně rozházené v různých tutoriálech a podobně.
Ono je stejně lepší je studovat podle významu než podle abecedy.

Nahoru Odpovědět 4.10.2012 20:51
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
samo007
Redaktor
Avatar
Odpovídá na tomasd49
samo007:

Skus kliknúť na záložku Help :)

 
Nahoru Odpovědět 4.10.2012 21:03
Avatar
Kit
Redaktor
Avatar
Odpovídá na TomBen
Kit:

Nepochopil jsem tvou definici rozdílu mezi "čistou" a "špinavou" podmínkou. Každý jazyk nabízí nějaké konstrukce pro řízení běhu programu, které v konečném důsledku přeloží na podmíněný či nepodmíněný skok na nějakou adresu.

Podle mne je spousta konstrukcí "čistých". Jen nejsou všechny doporučovány kvůli nepřehlednosti. Někdy může být lepší switch s jedním case, jindy je názornější a vhodnější mít třeba 5 elseif za sebou.

Nahoru Odpovědět 4.10.2012 21:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
samo007
Redaktor
Avatar
Odpovídá na Kit
samo007:

"Elseif" v Gamemaker-u nieje :)

(Ale to "switch" áno)

 
Nahoru Odpovědět 4.10.2012 21:11
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kit
TomBen:

Myslel jsem tím jen tolik, že if...else nedělá už nic jiného.
O použitelnosti nebo efektivitě to být nemělo. ;)

Nahoru Odpovědět 4.10.2012 21:14
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
samo007
Redaktor
Avatar
 
Nahoru Odpovědět 4.10.2012 21:22
Avatar
TomBen
Redaktor
Avatar
Odpovídá na samo007
TomBen:

Co je nejasné? Že if je podmínka? Nebo že ostatní jsou
zároveň otočka cyklu? Nebo že switch je více podmínek v jednom?

Nahoru Odpovědět 4.10.2012 21:26
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
samo007
Redaktor
Avatar
Odpovídá na TomBen
samo007:

Nie, nie, nie!
Ja som len nepochopil tú tvoju vetu:

"že if...else nedělá už nic jiného."

  • nedělá už nic jiného. - ???
 
Nahoru Odpovědět 4.10.2012 21:32
Avatar
TomBen
Redaktor
Avatar
Odpovídá na samo007
TomBen:

V duchu prvotního dotazu na tom zas tak nezáleží. :)

Nahoru Odpovědět 4.10.2012 21: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
samo007
Redaktor
Avatar
Odpovídá na TomBen
samo007:

Tak to áno. Dobre, chápem :P

 
Nahoru Odpovědět 4.10.2012 21:40
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 21 zpráv z 21.