【问题标题】:Implementing gravity in simple 2d game在简单的 2d 游戏中实现重力
【发布时间】:2014-04-18 16:52:08
【问题描述】:

我正在制作一个简单的游戏,比如马里奥,角色固定在一个位置,地面向左移动,给人一种角色移动的错觉。地面由左上角和右下角坐标定义的矩形块组成:

private int surfaceMatrix[][] = {
   {0, 100, 300, 0} // block having 100 height and 300 width
};

跳跃只是在向左移动表面的同时改变角色的y坐标,所以跳跃看起来像反转V字母。

其余代码——动画、移动精灵——与http://zetcode.com/tutorials/javagamestutorial/movingsprites/非常相似


我想让跳跃更真实,所以我的问题是 - 我如何在这里实现重力?我必须使用地面的 dx 和角色的 dy 才能做到这一点,可以吗?

这里的速度是多少?每秒像素数...?

怎么做?

【问题讨论】:

  • 现在角色跳跃时的高度如何计算?它是基于像素的吗?如果是这样,您如何支持不同的分辨率?我假设您计算与地面的相对位置,然后根据实际分辨率进行最终计算。如果是这样的话,随着时间的推移,重力只是一个比 height-1 稍微复杂的下降函数。
  • 嗯,现在分辨率是固定的,角色的高度也是固定的。
  • 如果您不计算像素本身但使用相对高度,则允许更改分辨率是微不足道的。但是如果你使用固定的分辨率,你知道他跳多高(比如 50 像素),我假设你在他跌倒时多次画他,目前使用固定间隔(比如 5px,取决于你的刷新率)所以使用默认是一种稍微复杂的方法来计算实际下降而不是固定的 5px,比如“5px+(iteration*5px)。这当然太简单了,但你明白了。

标签: java physics


【解决方案1】:

让我们看看:

g = 9.8 meters/second

以像素为单位获取角色的身高,并将其与平均男性身高相匹配,例如 1.7 米高。

然后使用万有引力公式:

y = y0 - g * t^2 / 2

其中 g 以像素/秒为单位。

【讨论】:

  • 我可以在这里看到两个问题。什么时候来这里?计时器的毫秒数乘以 10^3?并且 y 必须在这里浮动,所以我应该把它四舍五入吗?
  • @user3486978 这是 presudo 代码,而不是 Java。但是,是的,您应该将其舍入。至于时间 - 随心所欲地测量它(例如,使用 System.currentTimeMillis())然后转换为秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
相关资源
最近更新 更多