A więc mam problem z wprowadzeniem ruchu po przekątnej postaci. Gdy wcisne np strzalke i jakikolwiek inny klawisz to postac Od razu sie zatrzymuje, tak jakby zmienna event przechowywala tylko 1 wcisniety klawisz. Jak zrobic aby po wcisnieciu strzalki np w prawo i do gory postac szla po przekatnej?
Będę ogromnie wdzieczny za pomoc
To moj kod: funkcja zwracajaca zdarzenia, glowna petla odbierajaca zdarzenia, i funkcja do wsywietlania w ktorej jest tez opisane czy klawisz strzalki zostal wcisniety.
SDL_Event &ClassProgram::ReturnEvent(){
return event;
}
void ClassProgram::ProcessEvents(){
if(End) return;
while(SDL_PollEvent(&event) && event.type != SDL_MOUSEMOTION){
if(event.type == SDL_QUIT){
End = true;
break;
}
}
}
void ClassProgram::menu(){
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
Screen = SDL_SetVideoMode(ScrWidth, ScrHeight, 32, SDL_OPENGL | SDL_HWSURFACE | SDL_GL_MULTISAMPLEBUFFERS);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
glClearColor(0, 0, 0, 0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glViewport(0, 0, ScrWidth, ScrHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, ScrWidth, ScrHeight, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
object_laduj1.Load();
End = false;
while(!End){
ProcessEvents();
Draw(&ReturnEvent());
}
SDL_FreeSurface(Screen);
}
void ClassProgram::Draw(SDL_Event *GameEvent){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if(GameEvent->key.state == SDL_PRESSED && GameEvent->key.keysym.sym == SDLK_RIGHT) pos_x1 +=3;
else if(GameEvent->key.state == SDL_PRESSED && GameEvent->key.keysym.sym == SDLK_LEFT) pos_x1-=3;
if(GameEvent->key.state == SDL_PRESSED && GameEvent->key.keysym.sym == SDLK_UP) pos_z1 -=3;
else if(GameEvent->key.state == SDL_PRESSED && GameEvent->key.keysym.sym == SDLK_DOWN) pos_z1+=3;
object_laduj1.Draw(80, 80, 80, 80, pos_x1, pos_z1+pos_y1, 80, 80, false, 44);
SDL_GL_SwapBuffers();
}