【问题标题】:Create Java 2D gravity?创建 Java 2D 重力?
【发布时间】:2016-05-25 19:19:03
【问题描述】:

我正在创建 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,而不是向下滑动就像他在上升时所做的那样。没有视频真的很难解释这一点,但我希望有人能理解并帮助我。

【问题讨论】:

  • 创建通用对象和实体,赋予它们一些特征(可以跳跃?射击?)然后将玩家角色、敌人、老板从这些通用类中子类化是很常见的(也很有效) ...如果您像这样设计游戏,那么将一些实体包装在另一个称为(比方说)环境的类中并向环境添加功能(如重力)会容易得多。
  • stackoverflow.com/a/21785654 中的答案包括一个完整的示例,您可以简单地编译和运行。它指的是发射弹丸,但物体的运动(以及计算运动的基本技术)与跳跃相同。

标签: java 2d platform gravity


【解决方案1】:

This 问题为您的问题提供了基本答案。现在在你的跳转函数中,你只需要设置一次vertical_speed,并且每帧只调用fall()并添加一些moveY

【讨论】:

    【解决方案2】:

    这里有两种选择:

    选项 1. 模拟一些非常简单的物理。您向播放器添加力,因此按下向上箭头将添加使播放器向上移动的力。重力不断施加,因此它会逐渐抵消您按下向上箭头时施加的力。也许您只想在垂直方向上使用力,您可以这样做:

    // Each frame
    if(notOnTheGround){
        verticalVelocity -= GRAVITATIONAL_CONSTANT;
    }
    
    // When user jumps
    vertivalVelocity += JUMP_FORCE;
    

    选项 2。另一种方法是使用 projectile motion 为跳跃设置动画。

    // Each frame
    if(isJumping){
        verticalVelocity = initialVelocity*sin(angle) - g*animationTime;
        animationTime += TIME_STEP;
    }
    
    // When user jumps
    isJumping = true;
    animationTime = 0;
    initialVelocity = ... // calculate initial velocity
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多