游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4859|回复: 5

初学者问题.2D游戏中的跳跃.

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2010-2-11 15:29:00 | 显示全部楼层 |阅读模式
2d游戏里的跳跃.菜鸟的一点想法.请大家指教是否可行.或有更简单有效的方法.
假设:
跳跃高度上限为J.暂时设为9.(奇数.如果设为偶数.比如100的时候.上升和下降执行的次数不一样多.
或者改成FOR(int I=0;I<2J;I++)...)
人物当前高度为H.
人物上升和下降速度暂时不考虑.也不考虑地面或空中的障碍问题.
那么人物跳跃后就是一个高度从0到J再到0的过程.
是不是可以这样理解?
FOR(int I=0;I<=2J;I++) //I没啥实际意义.就是用来配合IF把跳跃的过程分成上升和下降两个阶段
{
IF (I<=J) //上升阶段.
{
H=I;   //这时候.H=I= 0 TO 9.
}
ELSE     //下降阶段.
{
H=2J-I;   //H=2J-I.这时候I=10 TO 18,H= 18-10 TO 18-18也就是H=9 TO 0的阶段.
}
}
如果上面可行.那么再加上一个上升/下降的速度变量S.大致想法就是:
I = 0 TO 8的时候.S = 8 TO 1(上升阶段.也就是越高越慢.)
I = 9的时候H = 9,那么S = 0 (I=9的时候代表跳到最高点.这时候S=0也就是滞空.)
I = 10 TO 18的时候H = 9 TO 0,S = 1 TO 9(下降阶段,这时候是越来越快.)
------...脑子乱了...------
或者这么说.S(上升/下降的速度) = J(跳跃高度上限) - H(当前高度)
然后用S来控制在上升/下降过程的每帧人物图象高度移动的距离

或者这么表达:S(上升/下降是的速度)和H(当前高度)的关系:

H  0   ------->   J   -------> 0  //J同上,表示跳跃高度上限.
  地面 -------> 最高点------->地面
S  S   ------->   0   -------> S   //S表示一个速度,或者说是两帧之间人物图象在高度上的间隔距离大小.
   快  ------->  慢   -------> 快
也就是说,跳跃还是分两个阶段.
1,上升(直到跳跃高度上限)阶段,H = 0 TO J,这时候的S = S > 0 TO S=0 的.S = 0 时代表滞空.
也就是上升是越来越慢直到滞空.
2,下降阶段,H = J-1 TO 0,这时候的S = (S = 0) TO (S > 0),也就是下降越来越快.


以上思路,是否可行或者有更简明高效的方法?

水平差.可能说得不是很明白.望大家多指教.有什么没说明白的地方也告诉我.

0

主题

28

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2010-2-12 09:23:00 | 显示全部楼层

Re:初学者问题.2D游戏中的跳跃.

我是用加速度 和 初速度,一切遵循物理原理

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-2-12 19:27:00 | 显示全部楼层

Re:初学者问题.2D游戏中的跳跃.

能给个公式吗?学习

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2010-2-13 00:23:00 | 显示全部楼层

Re:初学者问题.2D游戏中的跳跃.

x,y位置相对时间t的函数为
x = f(t) = X0 + Vx * (t - t0)
y = g(t) = Y0 + Vy * (t - t0) - g * (t - t0)^2
其中g为重力加速度,(Vx,Vy)是起跳的初速度,t0是起跳时间。(X0, Y0)是起跳位置
于是从t0开始任意时间t,对象的位置都可以求得。

对于跳跃是如此,对于其他各种方式的运动也可以如此。
抽象一下,假设对象从t0时间开始进行某种轨迹的运动,
该轨迹采样方法是x=f(t),则可以求出任意t0之后时间对象的位置。
如果t1时间对象改变运动方式,则在[t0,t1)时间内对象的位置可以用该轨迹求得。

运动方式的改变是由于对象与场景发生关系或者对象受到的控制发生变化(比如起跳)。这些都是一种来自对象外部的事件。
对象相应事件从而改变了运动状态,同时生成了新的运动轨迹。如此反复进行就可以自然的描述对象的运动过程了。

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-2-13 14:40:00 | 显示全部楼层

Re:初学者问题.2D游戏中的跳跃.

谢谢kaikai
另请问:
(重申一下,我水平无限接近/等于白痴.)
是不是理解您给出的公式,
x=x0+vx*t
x代表X轴坐标,x0代表X轴取得的一个数值(动作开始时的X轴坐标).vx代表起跳时人物在X轴方向上的速度(可能是跑/走/被击飞,可变.),t代表起跳后的时间长度(当前时间-起跳时间).这样得出人物在t时的X轴坐标.这样的话如果是人物移动(地面走/跑)的X轴坐标也有了.
y=y0+vy*t-g*t^2
y代表y轴坐标,y0代表动作开始时取得的Y轴坐标,vy代表起跳时人物在Y轴上的移动速度(??不是很理解.暂时理解为游戏中的一个跳跃能力数值.)g假设为9.8m/s^2,t代表起跳后时间长度(上同).
那么,给t一个值的话.
vy=9.8m/s,y0=0
t=0s,y=0+9.8*0s-9.8*0=0
t=0.5s,y=0+9.8*0.5-9.8*0.25=2.45
t=1s,y=0+9.8*1-9.8*1=0
.......
那么要让人物能够滞空2s的话.vy=19.6m/s才行.跳跃高度上限是9.8.
会不会跳得太高?上升速度太快?
是不是改成y=y0+vy*t-(gt^2)/2.滞空2s,vy=9.8m/s,跳跃高度上限4.5.

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2010-2-13 21:53:00 | 显示全部楼层

Re:初学者问题.2D游戏中的跳跃.

起跳初速度可以作为配置参数来设置,不过确实比较不直观。可以考虑以跳跃高度作为配置参数,然后反算出起跳的初速度。

可以假设g小一些,表示对象在引力比较小的星球。或者表示对象的尺度比较大(相当于修改了g的单位)。
也可以在不同阶段使用不同的g.比如表现这个对象下降时受到明显的空气阻力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-14 12:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表