C ++ SDL反应时间游戏

时间:2013-05-02 13:52:06

标签: c++ time sdl

我和我的朋友需要创建一个反应时间游戏。 某事like this

现在我们只是设法显示红色按钮的图像,但我们需要帮助如何制作一个hitbox,如果你点击红色按钮,它会变成绿色。

有人可以告诉我们如何?

我们正在使用SDL,我想这一点很重要。

到目前为止,这是我们的代码:

#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);
    }

}

2 个答案:

答案 0 :(得分:0)

您可以将SDL_Rect用作点击框。您可以使用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
    }

}

将此添加到while,这至少可以帮助您入门。

答案 1 :(得分: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);
    }

}