Java 2D 平台游戏 重力

标签 java game-physics

我目前正在用 Java 制作 2D 平台游戏。我是初学者,所以放轻松。 我对游戏中的重力有疑问。我使用不同的变量来进行坠落和跳跃。我正在使用平铺 map 。那么让我们进入正题吧。 我的跌倒方法是这样的 -

if(collisionDown == false) {
    characterY += fall;
    fall ++;
{

fall 等于 4。如果碰撞Down 为 true,则重置回 4。

我的跳转方法几乎是一样的:

if(key.E == true && collisionDown == true) {
   characterY -= jump;
   jump --;
}

jump 等于 16。如果 collisonDown 为 true,则重置回 16。

现在的问题是:想象角色正在跳跃。它在空中并且下降时字符Y +=下降;假设在那个时刻,characterY = 250 并且fall 等于- 15。角色下方的下一个实心图 block 从 Y 位置 255 开始。角色位于 250,并且未检测到碰撞,因此下一帧它将向 characterY 添加 15,即 250 + 15 = 265。此时,角色已“进入”位于位置 Y 255 的实心图 block 。

我已经“修复”了这个问题,因此角色回到了实心图 block 的顶部(这是可见的且烦人的。)这不是完美的解决方案,因为它每次进入实心图 block 时都会使角色减慢 1 帧(这是因为它检测到左右碰撞并且角色无法移动)。如果我能这么说的话,这个角色明显结巴了。

我需要解决该问题,但想不出任何解决方案。 因此,如果您提出建议,我会很高兴。谢谢。

最佳答案

我可能会使用类似下面的东西。

if(collisionDown == false) {
    characterYnext = characterY + fall;          //Get Next Position
    if(NextMovementCollides()){                  //Basically if next position is too far. 
    characterYnext += difference_between(CharacterY,Ground);     //This should move the character to the ground state.
    fall = 0;                                                   //No longer falling so reset the value.
    }
    else{characterY += fall; fall++;}       //Otherwise continue falling like normal.
}

免责声明:我不是 Java 程序员,所以我的语法可能有点不对劲。

这应该可行,只需将您的游戏逻辑插入到有意义的地方即可。

关于Java 2D 平台游戏 重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30965534/

相关文章:

c++ - 如何断定一个单位的士兵是否在网格 map 上相连

java - 计算球/点的弹跳角度

javascript - 如何更改 Box2D.js 调试绘制可视化的位置?

java - 为什么 'Path.startsWith' 行为不同于 'String.startsWith' 操作 - 即使是 'Path.getFilename'

java - 只有在单击关联的按钮两次后,才能通过 EditText 显示正确的输出

java - 编写 Util 类的最佳方式

android - 检查触摸点是否在 Unity 中的盒子碰撞器内

java - 使用 JPA 以一对多方式添加子项时未返回 ID

java - 在数组的 editText 中搜索相关词

algorithm - 计算3D固定关节约束中两个物体的脉冲/扭矩