首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 2D平台重力

Java 2D平台重力
EN

Stack Overflow用户
提问于 2015-06-21 14:22:30
回答 2查看 1.1K关注 0票数 1

我目前正在用Java制作一个2D平台。我是初学者,所以别紧张。我对游戏中的重力有问题。我用不同的变量来进行跌落和跳跃。我用的是平铺的地图。所以让我们直截了当。我的摔倒法是这样工作的-

代码语言:javascript
复制
if(collisionDown == false) {
    characterY += fall;
    fall ++;
{

fall等于4,如果collisionDown为真,它将重置为4。

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

代码语言:javascript
复制
if(key.E == true && collisionDown == true) {
   characterY -= jump;
   jump --;
}

跳转等于16,如果collisonDown为真,它将重置为16。

现在的问题是:想象一下角色在跳跃。在空气中,在下降的时候,characterY,+=,+=,字符下方的下一个实心瓷砖从Y位置255开始。字符位于250,不检测碰撞,因此下一个帧将15添加到characterY,即250 + 15 = 265。这时,字符“进入”了位于positionY 255的实心瓷砖。

我已经“修正”了这一点,这样角色就可以回到实心瓷砖上(这是可见的和烦人的)。这不是一个完美的解决方案,因为它每次进入实心瓷砖时都会减慢字符1帧的速度(这是因为它检测到了左、右碰撞,并且字符不能移动)。如果我能那样说的话,这个角色显然会结结巴巴的。

我需要一个解决那个问题的办法,但我想不出任何办法。所以如果你提出建议我会很高兴的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-21 14:48:47

我可能会使用下面这样的东西。

代码语言:javascript
复制
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程序员,所以我的语法可能有点错误。

这应该是可行的,只要插上你的游戏逻辑就行了。

票数 0
EN

Stack Overflow用户

发布于 2015-06-21 14:45:08

我通常处理这件事的方法是预先检查动作:

代码语言:javascript
复制
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.
    }

那就为秋天的计算做这个吧:

代码语言:javascript
复制
if(collisionDown == false) {
            characterY += moveDown(fall);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30965534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档