首页 > 解决方案 > SDL/SDL_gfx 库中的动画表面

问题描述

我正在使用 sdl2 库在 c 中重新创建游戏“超级六边形”。

我在应用程序中间画了一个圆圈,当玩家与键盘(左右键)交互时,小光标(不是鼠标,而是圆圈周围的三角形)应该围绕它移动,如下所示:

void Game_run(struct Game *game)
{
    //Previous rendering are cleared.
    SDL_RenderClear(game->renderer);
        //-------------------------------------------------------
        if (filledCircleRGBA(game->renderer,SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 10,255, 255, 255, 255) != 0)
        {
            fprintf(stderr, "Error: the circle was not rendered\n");
            SDL_DestroyRenderer(game->renderer);
        }
        arcRGBA(  game->renderer, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, 100, 0, 80, 255, 255, 255, 255 );
        filledTrigonRGBA (game->renderer, CURSOR_POSITION_X-10, CURSOR_POSITION_Y, CURSOR_POSITION_X+10, CURSOR_POSITION_Y, CURSOR_POSITION_X, CURSOR_POSITION_Y+10, 255, 255, 255, 255);
        SDL_RenderPresent(game->renderer);

        //-------------------------------------------------------
        //We are payng
        game->state = PLAYING;
        SDL_Event event;
        SDL_bool GameRunning = SDL_TRUE;
        while (GameRunning) //while the player didnt loose, the game is running
        {

            while (SDL_PollEvent(&event))
            {
                /* code */
                    switch (event.type)
                    {
                    //when a key is pressed
                    case SDL_KEYDOWN:
                                        //Detecting the pressed key
                                        switch (event.key.keysym.sym)
                                        {
                                        case SDLK_LEFT:
                                            printf("Left key pressed\n");
                                            break;
                                        case SDLK_RIGHT:
                                            printf("Right key pressed\n");
                                            break;

                                        default:
                                            break;
                                        }
                        break;
                    //when a key is unpressed
                    case SDL_KEYUP:
                                        switch (event.key.keysym.sym)
                                        {
                                        case SDLK_LEFT:
                                            printf("Left key up\n");
                                            break;
                                        case SDLK_RIGHT:
                                            printf("Right key up\n");
                                            break;

                                        default:
                                            break;
                                        }
                        break;
                    //if the user quit the game
                    case SDL_QUIT:
                        //The game is over
                        GameRunning = SDL_FALSE;
                        game->state = GAME_OVER;
                        break;

                    default:
                        break;
                    }
            }

        }

}

我已经实现了事件监听器来检测用户输入。但我不知道如何为这些元素设置动画。

我应该如何处理这个问题?我想了解当我使用 gfx 函数渲染元素时动画是如何工作的。我需要先将绘制的元素加载到 SDL_Surface 中吗?

标签: csdl-2

解决方案


推荐阅读