C 在SDL/SDL_gfx库中设置曲面动画

C 在SDL/SDL_gfx库中设置曲面动画,c,sdl-2,C,Sdl 2,我正在使用sdl2库在c中重新创建“超级六边形”游戏 我在应用程序中间画了一个圆圈,当游戏者与键盘(左键和右键)交互时,应该在它周围移动的小光标(不是鼠标,而是围绕圆圈的三角形)。 我已经实现了事件侦听器来检测用户输入。 但我不知道如何设置这些元素的动画 我应该如何处理这个问题?我想了解使用gfx函数渲染元素时动画是如何工作的。是否需要先将绘制的元素加载到SDL_曲面中?您已经为鼠标光标设置了动画。当然,它不会改变形状,但会改变位置。动画只是在每一帧中画一些不同的东西。有很多方法可以做到这一点,

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

我在应用程序中间画了一个圆圈,当游戏者与键盘(左键和右键)交互时,应该在它周围移动的小光标(不是鼠标,而是围绕圆圈的三角形)。 我已经实现了事件侦听器来检测用户输入。 但我不知道如何设置这些元素的动画


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

您已经为鼠标光标设置了动画。当然,它不会改变形状,但会改变位置。动画只是在每一帧中画一些不同的东西。有很多方法可以做到这一点,但不一定有最好的方法。你的问题有点太模糊了,如果你能试着写代码来画出你想要的东西,那会有帮助的。当你被更具体的东西卡住时,再问一次。我现在被卡住了。我没有任何动画片。我所做的就是在圆下画一个三角形。我想让那个三角形绕着那个圆移动。这是我第一次使用这个库。(当我说光标时,我谈论的是游戏中移动的小三角形)我认为你应该尝试寻找SDL_gfx的教程。完成本教程后,您将更好地了解需要做什么。是否可以使用SDL_gfx绘制一些东西,然后将其用作精灵表来设置动画?这样做吗?
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;
                    }
            }

        }

}