Valaki tud segíteni egy kicsit C++-ban aki ismeri az SDL-t is?
Code::Blocks-ot használok s be van téve az SDL, azzal nincs semmi gond.
Van egy 2 eventem. Az egyik a játék menüje a másik pedig maga a játék.
Hogy tudnék egyikből a másikba átlépni?
Eddig ennyire juttotam de nem megy bele:
int main( int argc, char* args[] )
{
boxrect.w = BOX_WIDTH;
boxrect.h = BOX_HEIGHT;
boxrect.x = (WINDOW_WIDTH - boxrect.w) / 2;
boxrect.y = (WINDOW_HEIGHT - boxrect.h) / 2;
boxrect2.w = BOX_WIDTH;
boxrect2.h = BOX_HEIGHT;
boxrect2.x = (WINDOW_WIDTH - boxrect2.w) / 2;
boxrect2.y = (WINDOW_HEIGHT - boxrect2.h) / 2;
boxbounds.x = 0;
boxbounds.y = 0;
boxbounds.w = WINDOW_WIDTH - boxrect.w;
boxbounds.h = WINDOW_HEIGHT - boxrect.h;
boxbounds2.x = 0;
boxbounds2.y = 0;
boxbounds2.w = WINDOW_WIDTH - boxrect2.w;
boxbounds2.h = WINDOW_HEIGHT - boxrect2.h;
if( !init() )
{
printf( "Failed to initialize!\n" );
}
else
{
if( !loadMedia() )
{
printf( "Failed to load media!\n" );
}
else
{
SDL_BlitSurface( gMenu, NULL, gScreenSurface, NULL);
SDL_UpdateWindowSurface(gWindow);
while(!quit)
{
while(SDL_PollEvent(&menuevent)!=0)
{
switch(menuevent.type)
{
case SDL_QUIT:
quit=true;
break;
case SDL_KEYDOWN:
{
if(menuevent.key.keysym.sym == SDLK_g)
{
SDL_BlitSurface( gHelloWorld, NULL, gScreenSurface, NULL );
SDL_UpdateWindowSurface( gWindow );
SDL_BlitSurface( gBox, NULL, gScreenSurface, &boxrect);
SDL_UpdateWindowSurface( gWindow );
SDL_BlitSurface( gBox2, NULL, gScreenSurface, &boxrect2);
SDL_UpdateWindowSurface( gWindow );
while(SDL_PollEvent(&event)!=0)
{
if(event.type==SDL_QUIT)
{
quit = true;
}
else if( event.type == SDL_KEYDOWN )
{
switch( event.key.keysym.sym )
{
case SDLK_w:
{
boxrect2.y -= boxspeed;
if (boxrect2.y < boxbounds2.y)
boxrect2.y = boxbounds2.y;
}
break;
case SDLK_UP:
{
boxrect.y -= boxspeed;
if (boxrect.y < boxbounds.y)
boxrect.y = boxbounds.y;
}
break;
case SDLK_s:
{
boxrect2.y += boxspeed;
if (boxrect2.y > boxbounds2.h)
boxrect2.y = boxbounds2.h;
}
break;
case SDLK_DOWN:
{
boxrect.y += boxspeed;
if (boxrect.y > boxbounds.h)
boxrect.y = boxbounds.h;
}
break;
case SDLK_a:
{
boxrect2.x -= boxspeed;
if (boxrect2.x < boxbounds2.x)
boxrect2.x = boxbounds2.x;
}
break;
case SDLK_LEFT:
{
boxrect.x -= boxspeed;
if (boxrect.x < boxbounds.x)
boxrect.x = boxbounds.x;
}
break;
case SDLK_d:
{
boxrect2.x += boxspeed;
if (boxrect2.x > boxbounds2.w)
boxrect2.x = boxbounds2.w;
}
break;
case SDLK_RIGHT:
{
boxrect.x += boxspeed;
if (boxrect.x > boxbounds.w)
boxrect.x = boxbounds.w;
}
break;
default:
break;
}
}
}
}
else if(menuevent.key.keysym.sym == SDLK_q)
quit=true;
}
break;
}
}
}
}
}
close();
cout<<"Vege a jateknak!"<<endl<<endl<<endl;
return 0;
}
A Loadmedia, a Bool init s a deklarációk megvannak...
Nem sok látszik sajnos...
Nekem ott van gondom hogy mikor a menuevent-be érzékeli hogy megnyomtam a g betűt akkor kirakja azokat a képeket viszont nem megy bele a while ciklusba ahol meg van nyitva az event, vagyis a játék
1. csak egyszer updateld a surface-t, mikor már mindent kirajzoltál, felesleges 3x.
2. gondolom belemegy a ciklusba, de mivel nincs benne kirajzolás, így nem fogsz látni semmit (lásd 1.)
az igaz hogy felesleges 3x update-elni... ki is szedtem, maradt egy :)
a képek megjelennek de nem megy bele a ciklusba... marad azon kívűl, mivel ha még1x megnyomom a g-t (azzal megyek be) akkor újratölti a képeket mintha megint bemenne...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!