想弄一个扔纸团类似的小游戏,不太清楚纸团飞出去曲线的设计方法,有谁知道指教一下。
1
xupefei 2015-12-16 19:37:55 +08:00 via Android
这有什么指教的啊,受力分析把运动分为垂直和水平两个速度,垂直方向加速度是重力,水平方向速度恒定。如果考虑‘空气阻力的话另说。
具体的公式请参考初高中物理课本… |
2
jamesxu 2015-12-16 19:38:03 +08:00 via iPhone
高中物理,抛物线
|
3
l6751902 2015-12-16 19:39:07 +08:00
ax^2+bx+c=y
|
4
Daniel65536 2015-12-16 19:43:18 +08:00 via iPhone
高中物理基本知识……
你需要两个变量 Vx Vy ,就是 x 方向速度与 y 方向速度,然后一个重力加速度 g 。 每帧纸团横向运动 Vx 个像素,纵向移动 Vy 个像素,然后给 Vy 加上 g 以模拟重力加速度对 y 方向速度的影响。 还可以进一步模拟空气阻力,高速情况下阻力与物体运动速度的平方成正比,低速情况下阻力与物体运动速度成正比,模拟同样是每帧计算阻力大小算出下一帧的新速度。 |
5
xdedm OP 额 如果具体到 cocos2dx 引擎该是怎么样的呢? 横向匀速,纵向加速,横向直接 moveto ,纵向的匀加速的过程怎么模拟呢?
|
6
ETiV 2015-12-16 19:54:48 +08:00
加个物理引擎吧, 不用你自己算.
|
7
dqh3000 2015-12-16 19:55:06 +08:00
建议使用一个物理引擎
然后只要提供初始加速度就自己计算了 自己弄也很麻烦啊 |
8
linhua 2015-12-16 20:13:05 +08:00
从原理来看:
算出每一帧(一般 1 秒 24 帧)的坐标不就行了。不过如果考虑到程序的执行时间,可能需要延迟一下,以实现下一帧的时间点到了,再绘制这一帧的数据的功能。这就复杂了。 |
9
lizhenda 2015-12-16 20:23:11 +08:00
说白了就是直接 setPosition ,通过公式算每帧的位置然后 update 里面更新。
其实最简单的使用 box2d , cocos2d-x 有 2 个支持的物理引擎,你可以自己选择。 噢,对了, 3.x 默认整合物理引擎到 Physics 里面了( Scene::createWithPhysics())你可以自己百度 |
10
czk1997 2015-12-17 07:27:36 +08:00
没有外力作用的情况下……
这不就是斜抛运动么…… 当然你要考虑空气阻力,这个不是特别好算………… 据形状不同,速度不同,空气阻力会变…… 但是变化不会特别大,所以可以考虑设置个定值或者微弱的递减…… |
11
regeditms 2015-12-17 09:18:37 +08:00
用贝塞尔曲线 实现一个抛物线轨迹,然后让纸团运行吧,简单是这样处理。
|
12
Comdex 2015-12-17 09:50:04 +08:00
搞安卓么?安卓里有个贝塞尔曲线的方法。。。。。
|
13
xdedm OP 贝塞尔曲线的却可以描绘曲线,但是每次仍纸团的角度不一样(或者考虑风速不一样), 对应贝塞尔曲线需要选取的控制点也每次都不一样, 所以这里就有每次控制点选取的问题。
|