0

我和我的朋友需要创建一个反应时间游戏。像这样的东西。

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

有人能告诉我们怎么做吗?

我们正在使用 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);
    }

}
4

2 回答 2

0

您可以将 SDL_Rect 用作​​命中框。您可以使用 SDL 自己的事件处理系统来检查何时单击鼠标按钮及其位置。然后你只需要检查鼠标位置是否在 SDL_Rect 内。

您可以在此处阅读有关 SDL的更多信息 所以......路上有点帮助。你有一个主循环,你拉事件。

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中,这至少可以帮助您入门。

于 2013-05-02T14:07:12.513 回答
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);
    }

}
于 2013-05-02T15:05:44.947 回答