在2D Java中移动游戏对象

时间:2014-10-04 09:43:23

标签: java

我正在创建一个2D Java平台游戏,只是为了学习游戏编程的基础知识。昨天,我创造了第一个敌人(goomba ^^),但它没有移动。我意识到坠落变量会被覆盖,但我无法弄清楚原因。我将发布方法:

        private void collision(LinkedList<GameObject> object) {

        for(int i = 0; i < handler.object.size(); i++) {

        GameObject tempObject = handler.object.get(i);

        if(tempObject.getId() == ObjectId.Block) {

            //Bottom
            if(getBounds().intersects(tempObject.getBounds())) {


                y = tempObject.getY() - height;         
                velY = 0;
                falling = false;

            }

            else {

                falling = true;

            }

            //Right
            if(getBoundsRight().intersects(tempObject.getBounds())) {

                x = tempObject.getX() - 18;

            }

            //Left
            if(getBoundsLeft().intersects(tempObject.getBounds())) {

                x = tempObject.getX() + 18;

            }

        }

    }

}

希望有人能帮助我,坐在这里等待3个小时^^

编辑:这是我的tick()方法:

    public void tick(LinkedList<GameObject> object) {

    x += velX;
    y += velY;

    if(velX < 0) facing = -1;

    else if(velX > 0) facing = 1;

    if(falling) {

        velY += gravity;

        if(velY > MAX_SPEED) {

            velY = MAX_SPEED;

        }

    }

    else {

        if(facing == 1) velX = 1;

        else if(facing == -1) velX = -1;

    }

    collision(object);

    goombaWalk.runAnimation();
    goombaWalkRight.runAnimation();

}

1 个答案:

答案 0 :(得分:0)

我认为无论事物是否彼此接近,都会定期调用此方法。否则,你不需要问它是否相交 - 你已经知道它了。

但对我来说看起来很奇怪的是,当你找到一个碰撞对象时,你不会突破循环。除非碰撞对象是列表中的最后一个,否则您的下降变量可能总是为真。

真正的问题是这个下降变量存在。你不需要它,因为你已经有了vely。如果velY非零,(或者是负数或其他什么)它会下降,对吗?因此,我的建议是摆脱堕落并为自己省去维护它的麻烦。