创建Java 2D重力?

创建Java 2D重力?,java,2d,platform,gravity,Java,2d,Platform,Gravity,我正在创建java游戏我现在是一个初学者,我想从某种平台游戏开始 我想知道如何让球员跳跃我知道如何让他上下移动,但我不知道如何让他上下移动后再下 这是我的密码: public void keyPress() { if (listener.arrowUp) { Jump(); } } private void Jump() { if(player.get(1).getPosY() > maxJump) { player

我正在创建java游戏我现在是一个初学者,我想从某种平台游戏开始

我想知道如何让球员跳跃我知道如何让他上下移动,但我不知道如何让他上下移动后再下

这是我的密码:

    public void keyPress() {
        if (listener.arrowUp) {
        Jump();
    }
}

private void Jump() {
    if(player.get(1).getPosY() > maxJump) {
        player.get(1).moveY(-10);
    } else if(player.get(1).getPosY() == maxJump) {
        player.get(1).moveY(85);
    }
}

所以。。只要我按下“w”,玩家就会向上移动-10px,当他点击maxJump(375)时,玩家开始时的位置是465,他会传送回465,而不是像向上时那样向下滑动。。没有视频很难解释这一点,但我希望有人能理解并帮助我解决这个问题。

这个问题给出了你的基本答案。现在,在跳转功能中,您只需设置一次垂直速度,并且每帧仅调用fall并添加一些moveY。

这里有两种选择:

备选案文1。模拟一些非常简单的物理。你给你的玩家增加了力量,所以按下向上箭头会增加一个力量,使玩家向上移动。重力是不断施加的,因此它将逐渐抵消按下向上箭头时施加的力。也许你只想在垂直方向上使用力,你可以这样做:

// Each frame
if(notOnTheGround){
    verticalVelocity -= GRAVITATIONAL_CONSTANT;
}

// When user jumps
vertivalVelocity += JUMP_FORCE;
备选案文2。另一种方法是使用动画设置跳跃的动画


创建通用对象和实体是常见且高效的,给它们一些特性可以跳跃吗?开枪?然后将玩家角色、敌人、老板从这些普通类中进行子类化。。。如果你像这样设计你的游戏,那么将一些实体封装在另一个叫做环境的类中,并向环境中添加一个像重力这样的功能就容易多了。中的答案包括一个完整的示例,你可以简单地编译和运行。它指的是被射击的弹丸,但物体的运动和计算运动的基本技术与跳跃相同。
// Each frame
if(isJumping){
    verticalVelocity = initialVelocity*sin(angle) - g*animationTime;
    animationTime += TIME_STEP;
}

// When user jumps
isJumping = true;
animationTime = 0;
initialVelocity = ... // calculate initial velocity