标题:关于贪吃蛇的问题,请高手帮忙!
只看楼主
哈里波特别大
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-2-11
 问题点数:0 回复次数:0 
关于贪吃蛇的问题,请高手帮忙!
我正在用做贪吃蛇的游戏,不过遇到个问题;
我想传统意义上的贪吃蛇,那条蛇的控制应该是是这样的
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就是一个上下左右四方向的向量,这样每帧的位移相等,所以转向不会出现任何不平滑的问题
    // 但是这种方法看上去蛇和死板,在空间中移动不流畅,就是明显给人以走格子的感觉
}

高手给我想想办法吧,我做了好几次平滑的尝试都不行
搜索更多相关主题的帖子: 贪吃蛇 移动 时间差 
2012-02-11 22:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360759-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.846992 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved