【问题标题】:How would I create Horizontally centered “Gravity” ? - libGDX -我将如何创建水平居中的“重力”? -libGDX -
【发布时间】:2014-03-08 14:02:00
【问题描述】:

这是一个看似简单的游戏机制,我一直在试图弄清楚如何去做。

为了尝试解释,我将描述一个想法(问题):

  • 基本上我们说有一条垂直线位于 屏幕。

  • 我们有一个精灵对象,它改变了它的水平速度 躲避导弹,但是这样做物体只会漂移 离开。

  • 如何在水平“中心线”上添加强大的重力 我的屏幕,这样我的精灵每次都会“落”回它 向外增加它的速度?

我可以发布我的源代码,但在这种特殊情况下解决问题并没有太大帮助。

我已经搜索了几天试图弄清楚这一点,所以任何帮助,尤其是代码示例都会非常有帮助!

【问题讨论】:

  • 也许一些描述性的图片会有助于理解您的问题。也可以考虑在gamedev.stackexchange.com 中发布这个问题。
  • 请查看我的编辑,我也在gamedev上发布了这个

标签: java android libgdx box2d game-physics


【解决方案1】:

我过去曾编写过这种类型的东西。重力(在物理学中)是一种加速度,所以

1) 如果精灵位于直线的右侧,则每 1/n 秒从其水平速度中减去一次,并且

2) 如果精灵位于直线的左侧,则每 1/n 秒添加一次水平速度。

实验添加/减去一个常数,或者添加/减去一个数字,使精灵离中心线越远。

无论采用哪种方式,都会产生钟摆效果。如果您不想这样做,您还必须添加一个阻尼因子。一种简单的方法是,如果精灵远离中心线,则添加/减去的值大于精灵返回中心线时的值。因此,将精灵拉到停止状态的“重力”大于将精灵带回中心线的重力加速度。

【讨论】:

  • 感谢您的建议!但是我有一个问题,我将如何创建中心线变量? (我是游戏开发新手)
  • 感谢您的支持并将我的问题标记为正确的问题!对于中心线变量,我假设您会知道所有精灵的 X 和 Y 位置。好吧,假设屏幕是 800 像素宽。任何 X 位置为 400 的精灵都位于中心线。如果精灵的 X 小于 400,则开始将您的因子添加到其 X 速度。如果精灵的 X 大于 400,开始从它的 X 速度中减去你的因子。我认为应该这样做!
  • @BrettFromLA 我赞成你的回答。只是一个小建议:您说,如果屏幕是 800 像素宽,则 x 坐标为 400 的精灵位于中心线上。我不会用像素来吸引你。而是使用相机独立于分辨率。接下来:精灵x coordinate在它的左边,所以如果精灵正好在屏幕中间,他的x coordinate会小于重心,他会向右移动。所以你需要说:if(sprite.x + sprite.width / 2 < gravityCenter)。无论如何,很好和详细的答案。 +1
  • @Springrbua 你完全正确!感谢您的澄清。
【解决方案2】:

当您使用 libgdx 时,您还应该使用相机。因此,您不必以像素为单位进行计算。例如,您说我的屏幕是 16 个世界单位宽度和 9 个世界单位高度(16/9 纵横比)。所以你可以说重心在那个 16 的中心,所以如果我没记错的话是 8.5。现在你可以说:if (player.center.x < 8.5f) { player.xSpeed += GRAVITY_HORIZONTAL }if (player.center.x > 8.5) { player.xSpeed -= GRAVITY_HORIZONTAL }。在这种情况下,重力是一个常数值。但正如@BrettFromLA 所说,如果到中心的距离增加,您也可以让价值增加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多