我目前正在制作一个演示,只是为了掌握如何制作游戏。它可能会在未来变成某种东西,但就目前而言,它仅仅是为了学习。
我想,我的演示受到塞尔达传说的影响。它具有TLoZ具有的自上而下的外观。
我的精灵是一个32x32像素的图像,演示以60fps运行,我已经计算出我希望我的精灵使用PyxelEdit动画的速度有多快。当我的角色走路时,每170毫秒显示一个动画帧。他每帧移动4个像素,所以他正以我想要的速度移动和制作动画。
我遇到的问题是,当我的钥匙被释放时,我希望我的角色完成动画循环并且他不会。当我释放一个移动键时,他有时会停在错误的动画帧上,就像说我的左脚或右脚是向前的,当我希望他静止时。我只是不确定该怎么做。我已经尝试在Event :: KeyReleased事件发生时检查动画计数并增加动画计数直到它达到一定数量,以便它停在说数字1以便他静止不动,它只是没有& #39; t work。
我不认为这需要查看我的代码,只需要大致了解如何确保在释放运动键时动画,直到他在第1帧并移动他每次都有一定数量的像素,直到他停下来。
答案 0 :(得分:0)
如果我理解正确,你需要这样的东西:
// The game loop
while (game_running)
{
// ...
// Your code
// ...
// Advance the animation while moving, or if not, cycle through
// the animation frames until frame 1 is reached
if (keyPressed(somekey) || currentAnimationFrame != 1)
{
advanceAnimationFrame();
}
// ...
// Your code
// ...
}
当然,这不是SFML代码,但应该通过
获得一般性的想法答案 1 :(得分:0)
你可以使用FSM这样的东西。
// Visual states of the character.
enum class State { WALKING, STANDING, ATTACK, };
State character_state = State::STANDING;
// Change on input (or other things like impact.)
if(input.up() || input.down() || input.left() || input.right)
character_state = State::WALKING;
else
character_state = State::STANDING;
// Render based on the current state.
switch(character_state)
{
case(State::WALKING):
render(cycle_walk_animation(frame_time));
break;
case(State::STANDING):
render(standing_still_frame());
break;
}
我用2D和3D完成了这项工作。