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