C++/SDL - Zpracování událostí – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++/SDL - Zpracování událostí – C / C++ – Fórum – Programujte.comC++/SDL - Zpracování událostí – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Lorin0
Návštěvník
18. 11. 2012   #1
-
0
-

V tutoriálech popisujících SDL skoro vždy zpracování událostí demonstrují na následujícím kódu:

SDL_Event event;

while( SDL_PollEvent( &event ) ){
    switch( event.type ){
        case SDL_KEYDOWN:
	    printf( "Key press detected\n" );
        break;

	case SDL_KEYUP:
	    printf( "Key release detected\n" );
	break;

	default:
	break;
    }
}

Pokud budu načítat tři obrázky, které následně zobrazím, počkám na stisknutí křížku nebo ESC a celou aplikaci ukončím, bude mi něco podobného stačit. 

V případě že budu mít několik objektů (dejme tomu - okno, tlačítko, textové pole), které se mají v reakci na události nějak chovat, bude situace trochu složitější. V zásadě mě napadla dvě řešení:

A) Do každého objektu vložit metodu handleEvents(SDL_Event *event). Tato metoda projde všechny události které jsou pro daný objekt zajímavý a něco udělá. 

while( SDL_PollEvent( &event ) ){
    switch( event.type ){
        case SDL_KEYDOWN:
	    printf( "Key press detected\n" );
        break;

	case SDL_KEYUP:
	    printf( "Key release detected\n" );
	break;

	default:
	break;
    }
    // button.handleEvents(&event);
}

B) Druhá možnost, která mě napadla byla vytvoření jednoho hlavního objektu, který by v sobě uschovával seznam akcí na které chci reagovat a funkcí, které se v reakci na událost mají spustit. 

Do tohoto objektu bych některou metodou přidal tzv. listenery pro každý objekt, který se má chovat v závislosti na událostech. Místo toho abych do hlavní smyčky programu vložil pro každý objekt řádek s mujobjekt.handleEvent(&event), stačilo by volání hlavního objektu, který by se o zbytek postaral.

Používá se v reálu některá z mnou popsaných metod, nebo se pro zpracování událostí a předání informací o události ostatním objektům používá něco úplně jiného? 

Děkuji za vaše odpovědi,

Lorin

Nahlásit jako SPAM
IP: 89.190.72.–
Lorin0
Návštěvník
24. 11. 2012   #2
-
0
-

bump

Nahlásit jako SPAM
IP: 89.190.72.–
yaqwsx+9
Posthunter
24. 11. 2012   #3
-
0
-

Nejsem si jist, jestli jsem pochopil otázku. Správně by sis do svého objektu měl přidat nějaké mezirozhraní k SDL - metody, které kopírují akce, na které chceš reagovat - tedy měl by mít např. metody OnResize, OnLeftArrowPress, atd...

V handleru zpráv potom zavoláš příslušnou metodu. V jednom projektu jsem potřeboval hodně modulární reakci na stisk kláves, a tam jsem to řešil tak, že jsem měl mapu<klávesa, funktor> a ve smyčce zpráv jsem volal příslušný funktor.

Nahlásit jako SPAM
IP: 85.160.38.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Lorin0
Návštěvník
27. 11. 2012   #4
-
0
-

Děkuji.

Nahlásit jako SPAM
IP: 89.190.72.–
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, 18 hostů

Podobná vlákna

C# události — založil Wabbit

Udalosti v C# — založil jirkab

Události — založil XP

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ý