SDL - šikmý pohyb? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SDL - šikmý pohyb? – C / C++ – Fórum – Programujte.comSDL - šikmý pohyb? – C / C++ – Fórum – Programujte.com

 

vollf820
Stálý člen
22. 9. 2008   #1
-
0
-

Bohužel vás musím opět otravovat, tentorkát už snad smysluplněji než s minulým problémem. Chtěl sem udělat, aby se mi obrázek hejbal po zmáčknutí šipek. Nahoru, dolů. doleva a doprava mi to funguje, ale jak to udělat kdyz zmačknu dvě šipky aby se hejbal šikmo? Nějak mi to nechce registrovat zmáčknutí 2 kláves najednou. Uz sem zkoušel plno možností ale stále nic. Kousek kódu:

 switch(event.key.keysym.sym)

{
case SDLK_LEFT:

a-=1;
DrawImage(screen, "flower.png", a , b);
break;

case SDLK_DOWN:
b+=1;
DrawImage(screen, "flower.png", a , b);
break;


case SDLK_RIGHT:

a+=1;
DrawImage(screen, "flower.png", a , b);
break;

case SDLK_UP:
b-=1;
DrawImage(screen, "flower.png", a , b);
break;

case SDLK_ESCAPE:
done=true;
break;
default:
break;
}


Napadalo mě něco takového:
 case SDLK_LEFT:			


a-=1;
DrawImage(screen, "flower.png", a , b);
if(event.key.keysym.sym == SDLK_UP) // přizmáčknutí další klávesy
{
a-=1;
b-=1;
DrawImage(screen, "flower.png", a , b);
}
break;

Ale při tomhle mi to při stisku šipky doleva jede šikmo. Zkrátka to nějak nevezme 2 klávesy stisknutý najednou. Nemá s tím někdo zkušenosti ???

Díky moc

Nahlásit jako SPAM
IP: 91.195.106.–
Zelenáč0
Posthunter
22. 9. 2008   #2
-
0
-

Pomoci SDL_GetKeyState ziskas pole, ve kterem kazdy prvek obsahuje informaci o stavu klavesy (stisknuto/nestisknuto) s odpovidajicim indexem. Tedy:



Uint8 *keys = SDL_GetKeyState(0);

if(keys[SDLK_UP]) ; // stisknuto
else ; // nestisknuto


Ted uz jednoduse vytvoris podminku



if(keys[SDLK_UP] && keys[SDLK_RIGHT])

Nahlásit jako SPAM
IP: 213.220.249.–
22. 9. 2008   #3
-
0
-

Nebo jeste jednodussi je to proste nespojovat. Zmackne se sipka nahoru -> pohni nahoru. Zmackne se doleva -> pohni doleva. A kdyz se znacknou obe, tak se vykonaji obe.

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
vollf820
Stálý člen
24. 9. 2008   #4
-
0
-

Ještě bych prosil ... jak tam místo if() použít switch?? Vypadá to jako banalita ale at sem to prokombinoval jak sem chtěl, pořád mi to nebere :(

Tady je pár vzorů, jak sem to zkoušel:

Uint8 *klavesa = SDL_GetKeyState(NULL);
switch(klavesa){
case [SDLK_UP]:
...
...


a tak podobně všelijak. Při nějakejch pokusech mi to i psalo, že ve switchy nesmí bejt Uint8 tak sem to přetypoval na int ale bez výsledku.

Děkuju

Nahlásit jako SPAM
IP: 91.195.106.–
24. 9. 2008   #5
-
0
-

Switch se ti tam nehodi, protoze neni vhodny na praci s vice podminkami najednou.

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
vollf820
Stálý člen
24. 9. 2008   #6
-
0
-

Tam je jenom jedna podmínka ne??

if(klavesa[SDLK_UP]);
a++;

by se dalo převíst do switche ne? Problém je, že je tam to pole no (teda aspon pro mě).

Nahlásit jako SPAM
IP: 91.195.106.–
24. 9. 2008   #7
-
0
-

Jestli opravdu tolik prahnes po tom switchi, tak pouzij cyklus a projdi to cyklicky.

Nebo nepouzivej to SDL_GetKeyState(0) a zpracovavej to normalne primo v event loopu. Swicth je pro pripad, kde mas vic hodnot jedne promenne, ne pole promennych o pouze dvou ruznych hodnotach.

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
vollf820
Stálý člen
24. 9. 2008   #8
-
0
-

ok díky moc ...

Nahlásit jako SPAM
IP: 91.195.106.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 86 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý