2013-05-02 2 views
0

나와 내 친구는 반응 시간 게임을 만들어야합니다. 무언가 like this.C++ SDL 반응 시간 게임

바로 지금 우리는 빨간 버튼의 이미지를 보여 주었지만, 적색 버튼을 클릭하면 초록색이됩니다.

누군가가 어떻게 표시 할 수 있습니까?

우리는 SDL을 사용하고 있습니다. 당신은 히트 박스로 SDL_Rect을 사용할 수 있습니다

#include <SDL/SDL.h> 

void Plot(SDL_Surface *sur, int x, int y, SDL_Surface *dest) 
{ 
    SDL_Rect rect = {x, y}; 
    SDL_BlitSurface(sur, NULL, dest, &rect); 
} 

SDL_Surface *LoadImage(const char *filename) 
{ 
    SDL_Surface *sur = NULL; 
    sur = SDL_LoadBMP(filename); 

    if(sur == NULL) 
    { 
     printf("Img not found"); 
    } 

    SDL_Surface *opsur = NULL; 

    if(sur != NULL) 
    { 
     opsur = SDL_DisplayFormat(sur); 
     SDL_SetColorKey(opsur, SDL_SRCCOLORKEY, 0xFFFFFF); 
     if(opsur != NULL) 
      SDL_FreeSurface(sur); 
    } 

    return opsur; 
} 

int main(int argc, char **argv) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    SDL_WM_SetCaption("Eksamensprojekt", NULL); 
    SDL_Event Event; 
    bool Running = true; 

    SDL_Surface *sur = LoadImage("Red.bmp"); 

    while(Running) 
    { 
     while(SDL_PollEvent(&Event)) 
     { 
      if(Event.type == SDL_QUIT) 
       Running = false; 
     } 
     SDL_FillRect(screen, &screen->clip_rect, 0x000000); 

     Plot(sur, 215, 140, screen); 

     SDL_Flip(screen); 
    } 

} 

답변

0

:

다음은 지금까지 우리의 코드입니다. SDL의 자체 이벤트 처리 시스템을 사용하여 마우스 버튼을 클릭했을 때이를 확인하고 위치를 확인할 수 있습니다. 그런 다음 마우스 위치가 SDL_Rect 내에 있는지 확인해야합니다.

SDL here. 에 대한 자세한 내용은 다음을 참조하십시오. 메인 루프가 있고 이벤트를 가져옵니다.

if (event.type == SDL_MOUSEBUTTONDOWN){ 

    //Get mouse coordinates 
    int x = event.motion.x; 
    int y = event.motion.y; 

    //If the mouse is over the button 
    if(checkSpriteCollision(x, y)){ 
     // Yay, you hit the button 
     doThings(); 
    } 
    else 
    { 
     // D'oh I missed 
    } 

} 

는 동안이 추가, 적어도 얻을 것이다 당신은 시작했다.

+0

우리는 이미 그것을보고와 시도, 여전히 실패 :(당신이, 또는 다른 사람이 우리를 위해 그것을 밖으로 쓸 수 있다면이 답변 정말 좋은 :) – user2298880

+0

감사 할 것이다, 그러나 우리는 아직 할 수 없습니다 그것을 작동 시키십시오. 함수를 삽입하는 동안 함수가 2 개가 있습니다. 그리고 클릭 할 때 녹색 버튼을 어떻게 보이게합니까? 그것을 클릭하면 빨간색에서 녹색으로 변경됩니다. – user2298880

+0

내부 루프 ('If (event.type == SDL_Quit)'아래) 색상을 전환하려면 기본적으로 플롯 기능에서와 마찬가지로 빨간색 대신 녹색 표면 만 사용해야합니다. bool 값을 사용하여 blit해야하는 두 서페이스 중 어느 것을 결정할 수 있습니다. – olevegard

0

이와 비슷한?

while(Running) 
    { 
     while(SDL_PollEvent(&Event)) 
     { 
      if(Event.type == SDL_QUIT) 
       Running = false; 

      if (event.type == SDL_MOUSEBUTTONDOWN){ 

       //Get mouse coordinates 
       int x = event.motion.x; 
       int y = event.motion.y; 

       //If the mouse is over the button 
       if(checkSpriteCollision(x, y)){ 
        // Yay, you hit the button 
        doThings(); 
       } 
       else { 
        // D'oh I missed 
       } 

      } 
     } 
     SDL_FillRect(screen, &screen->clip_rect, 0x000000); 

     Plot(sur, 215, 140, screen); 

     SDL_Flip(screen); 
    } 

} 
+0

프로그래밍에 큰 도움이 될만한 사람 : D – user2298880

+0

예, 'CheckSpriteCollision (x, y)'함수를 구현했다고 가정 할 때 누군가가 버튼을 클릭했는지 확인하는 코드가 있습니다 하지만'Plot (...) '버튼을 클릭하면 녹색면이 블라이드되고 그렇지 않으면 빨간색 버튼이 표시됩니다. – olevegard