关于贪吃蛇的问题,请高手帮忙!
我正在用做贪吃蛇的游戏,不过遇到个问题;我想传统意义上的贪吃蛇,那条蛇的控制应该是是这样的
1. 初始化蛇( 创建蛇的每一个块, 然后连接)
2. 开始后另蛇 往一个方向移动,所有的蛇身(块)跟随蛇头往一个方向移动
3. 转向通过键盘控制,将蛇头沿着新的方向移动,蛇身的方向保持不变,直到移到蛇头最后一次转向的位置,然后调整为新的位置;
问题来了:
如果每一次移动(一段时间间隔后)如果每一块移动的位移是相同的,问题不大;但如果我的位移根据delta time(两帧之间的时间差)计算一个单位时间的位移,但是由于机器的性能不一,每次的delta time不可能完全一样,导致速度可能不均匀,也就是意味着转向会不平滑,某一块会超出预定的目的而被拉回,或者就是改变方向后无法跟上前面一块,等等;
具体伪代码是这样的:
void snakeNode::processMovement( float dt )
{
// 转向时不平滑,如何解决?
vector2d deltaMovement = direction * speed * dt; // direction ==> vector2d
localPosition += deltaMovement;
}
// 旧方法
void snakeNode::processMovement()
{
const float speedScaleFactor = 10.0f;
vector2d deltaMovement = direction * speed * speedScaleFactor;
localPosition += deltaMovement;
// 由于 speed, speedScaleFactor都是常量, 而direction就是一个上下左右四方向的向量,这样每帧的位移相等,所以转向不会出现任何不平滑的问题
// 但是这种方法看上去蛇和死板,在空间中移动不流畅,就是明显给人以走格子的感觉
}
高手给我想想办法吧,我做了好几次平滑的尝试都不行