| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 468 人关注过本帖
标题:关于贪吃蛇的问题,请高手帮忙!
只看楼主 加入收藏
哈里波特别大
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
快速回复:关于贪吃蛇的问题,请高手帮忙!
数据加载中...
 
   



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

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