没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
【
Visual C++
】游戏开发笔记二十一
游戏基础物理建模
(
三
)
摩擦力系统模拟
本节内容主要介绍摩擦力系统的模拟,顺带着介绍了暴雪的神级作品《暗黑破
坏神 3》。
浅墨已经在开始动笔写 DirectX 11 相关的内容了,等这几节 Win32 的文章发
完之后,即刻开始 DirectX 11 的讲解。
一.基础知识讲解
摩擦力是两个表面接触的物体相互运动时互相施加的一种物理力。广义地物体
在液体和气体中运动时也受到摩擦力。摩擦力可谓无处不在,为了模拟出与现
实生活相符的游戏场景,游戏或者游戏引擎中,用相关代码实现摩擦力的真实
效果是十分必要的。
任何一款完善的物理引擎,都有模拟摩擦力系统的相关代码。如大名鼎鼎的
havok 物理引擎(暗黑破坏神 3 所采用的物理引擎),也如最近在移动平台上
很热门的 Box2d 物理引擎。
上一节范例中并没有考虑小鸟下坠与弹跳时的摩擦力影响效果,这节笔记里面
我们将其考虑其中,加入了使小鸟运动速度减慢的负向加速度,但忽略小鸟与
空气之间的阻力。下面看看如何实现这样一个比较符合真实状况的小鸟下落与
弹跳效果:
[cpp]view plain copy print ?
1. intx=0,y=100,vx=10,vy=0;//初始横坐标 x=0,初始纵坐标 y=100,初始水平方向
速度 vx=10,初始竖直方向速度 vy=0)
2.
3. intgy=2,fx=-1,fy=-4;//重力加速度 gy=2,x 方向摩擦力为-1,f 方向摩擦力为-
4
4.
5.
6. x+=vx;//计算 X 轴方向贴图坐标,每调用一次 MyPiant(),x 坐标就加
上一个 vx 的当前值
7.
8. vy=vy+gy;//计算 Y 轴方向速度分量,vy 随着每一次 MyPiant()函数
的调用就加上一个 gy(重力加速度)
9. y+=vy;//计算 Y 轴方向贴图坐标,每调用一次 MyPiant(),y 坐
标就加上一个刚改变过后的 vy,相当于加速运动
10.
11. if(y>=rect.bottom-70)//判断是否触地,如果触碰到窗口边界,进
行调整
12. {
13. y=rect.bottom-70;
14.
15. //X 轴方向的摩擦力处理
16. vx+=fx;//vx=fx+vx;这里 fx 为负值,所以每调用一次
MyPiant(),vx 恒定减小一个 fx
17. if(vx<0)//当 vx 值递减到小于 0 时,就将其设为 0,即小球在 X 方向不
再移动。
18. vx=0;
19.
20. //Y 轴方向摩擦力处理
21. vy+=fy;//vy=fy+vy;这里 fy 同样为负值,所以每调用一次
MyPiant(),vy 恒定减小一个 fy
22. if(vy<0)//若速度减到小于等于 0,置为零,即小球在 Y 方向不再移动。
23. vy=0;
24.
25. vy=-vy;
这段代码里面小鸟由高出下落触及地面进行反弹,且存在落地时的摩擦力,使
得小鸟在落地弹跳后速度减慢,最后呈现静止的状态,停在窗口边缘。
二.神级游戏作品《暗黑破坏神Ⅲ》的
介绍
剩余12页未读,继续阅读
资源评论
Swallow213399
- 粉丝: 1
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功