繁体   English   中英

Java 2D Platformer引力

[英]Java 2D Platformer Gravity

我目前正在用Java开发2D Platformer。 我是初学者,请放轻松。 我在游戏中的重力问题。 我对下降和跳跃使用了不同的变量。 我正在使用平铺的地图。 因此,让我们说清楚。 我的跌落方法是这样的-

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

fall等于4。如果collisionDown为true,则重置为4。

我的跳转方法几乎相同:

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

jump等于16。如果collisonDown为true,它将重置为16。

现在的问题是:想象角色正在跳跃。 它在空中,在下降的同时,Y + =下降; 假设characterY = 250且跌落等于-在该确切时刻等于15。 角色下方的下一个实体图块从Y位置255开始。角色在250处并且未检测到碰撞,因此下一帧将其添加到characterY 15,即250 + 15 =265。此时,角色已“进入”实体图块位置Y 255。

我已经“修复”了,使角色重新回到实体图块的顶部(并且可见且令人讨厌。)这不是完美的解决方案,因为它会在每次进入实体图块时减慢角色一帧的速度(这是因为它检测到左右碰撞并且角色无法移动)。 如果我可以这样说,这个角色显然会口吃。

我需要一个解决方案,但是什么也想不出来。 因此,如果您提出建议,我会很高兴。 谢谢。

我通常处理此问题的方法是预先检查运动:

private int moveDown(int fall){
        if (isSolidBlock(characterX, characterY + fall)){
            //Knowing the height of your block, calculate some kind of reduction. If your block height is 40, it's probably something like (characterY + fall)%40
            fall = 4;
            collisionDown = true;
            return maxFallUntilSolidBlockReached();
        }
        fall++;
        return fall;
    }

private boolean isSolidBlock(int x, int y){
        //Implement some kind of check if at (x,y) there's a solid block.
    }

然后,只需执行以下计算即可:

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

我可能会使用类似以下的内容。

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程序员,所以我的语法可能有点偏离。

这应该可行,只要在有意义的地方插入游戏逻辑即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM