C++, SDL - nespouští se callback funkce časovače – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++, SDL - nespouští se callback funkce časovače – C / C++ – Fórum – Programujte.comC++, SDL - nespouští se callback funkce časovače – C / C++ – Fórum – Programujte.com

 

General0
Návštěvník
5. 12. 2010   #1
-
0
-

Učim se podle zdejších tutoriálů dělat s SDL, ale mam problém, nespouští se mi callback funkce Timer1(), ta má vykreslit vždycky posunutej obrázek (v tom problém neni). Nemoch by mi někdo pls poradit co s tim může bejt?

#include <SDL/SDL.h>

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

SDL_Surface *screen;
SDL_Surface *image;
Uint32 left = 0;
Uint32 top = 0;

void LoadImages()
{
image = SDL_LoadBMP("image.bmp");
}

void DrawIMG(SDL_Surface *img, int x, int y)
{
SDL_Rect rect;
rect.x = x;
rect.y = y;
SDL_BlitSurface(img, NULL, screen, &rect);
}

//callback
Uint32 Timer1(Uint32 interval, void* param)
{
//MessageBox(NULL, NULL, NULL, NULL);
left += 100;
top += 100;
DrawIMG(image, left, top);
return interval;
}

SDL_TimerID timer1 = SDL_AddTimer(1000, Timer1, NULL); //časovač

int main(int argc, char *argv[])
{
if(SDL_Init(SDL_INIT_VIDEO) < 0){
printf("Inicializace SDL se nezdařila: %s", SDL_GetError());
exit(1);
}

atexit(SDL_Quit);
screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);

if (screen == NULL){
printf("Vytvoření okna se nezdařilo: %s", SDL_GetError());
exit(1);
}

LoadImages();

Uint32 flags = SDL_SWSURFACE;
SDL_Event event;
bool quit = false;
SDL_Surface * screen = NULL;
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(700, 500, 32, flags);
SDL_Flip(screen);

while (quit == false)
{
SDL_WaitEvent(&event);
switch(event.type) {
case SDL_QUIT:
quit = true;
}
}

SDL_FreeSurface(screen);
SDL_Quit();
}

Nahlásit jako SPAM
IP: 89.103.14.–
Bald3rr0
Super člen
5. 12. 2010   #2
-
0
-

To General : Nespouští se, protože jí nikde nevoláš.

Nahlásit jako SPAM
IP: 83.240.74.–
General0
Návštěvník
5. 12. 2010   #3
-
0
-

Když 1× zavolam Timer1(1000, NULL); tak jasně že se to provede, ale to mi má v určitym intervalu provádět časovač kterej se spustí hned na řádku 34 ne? Nechápu furt proč to nejde...

Nahlásit jako SPAM
IP: 89.103.14.–
KIIV
~ Moderátor
+43
God of flame
7. 12. 2010   #4
-
0
-

To General : je mozne ze to musis udelat v kodu.. nikoliv nekde mimo jak to mas

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ian0
Stálý člen
8. 12. 2010   #5
-
0
-

Timery musíš nejdřív inicializovat, i.e.

SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);


Nahlásit jako SPAM
IP: 89.24.135.–
-- ian
General0
Návštěvník
8. 12. 2010   #6
-
0
-

jj díky za snahu, už mi poradily (máš pravdu ian:D).

Nahlásit jako SPAM
IP: 89.103.14.–
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, 38 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ý