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

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

Aktivity (1)
Avatar
tomasd49
Redaktor
Avatar
tomasd49:29.9.2012 10:42

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:29.9.2012 11:00

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:29.9.2012 11:36

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:29.9.2012 11:51

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:29.9.2012 12:28

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:29.9.2012 12:51

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:29.9.2012 13:11

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:29.9.2012 18:22

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:29.9.2012 19:17

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:1.10.2012 11:14

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:4.10.2012 18:51

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:4.10.2012 20:51

Č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:4.10.2012 21:03

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:4.10.2012 21:06

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:4.10.2012 21:11

"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:4.10.2012 21:14

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
Odpovídá na TomBen
samo007:4.10.2012 21:22

o_O Nerozumiem

 
Nahoru Odpovědět 4.10.2012 21:22
Avatar
TomBen
Redaktor
Avatar
Odpovídá na samo007
TomBen:4.10.2012 21:26

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:4.10.2012 21:32

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:4.10.2012 21:38

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:4.10.2012 21:40

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.