在javascript中跳转代码

时间:2016-07-05 02:25:24

标签: javascript physics

我是十一岁的新手编程,我正在使用javascript为我的学校制作一个简单的平台游戏。

现在我正在研究使角色跳跃的代码。它比上下然后下降的角色更复杂,因为我希望这些动作流畅而且看起来很逼真。当角色跳跃时,它会快速离开地面,然后随着它变高而减速,当它到达某一点时,它将开始缓慢下降。它会在下降时加速(可能是通过使用某种类型的加速度变量),然后撞到地面并完全停止。

我希望角色能够在空中左右移动,如果按住键,则跳跃一次,然后当角色击中地面时,如果仍然按住该键,则再次跳跃。 (游戏中的角色应该能够跳得很高)

我已经尝试过这样做,但我发生了一些搞笑的错误。

这是我(非常破碎)的代码:

    //movement (x)
    var maxSpeed = 12.5; 
    var xForce = 0;
    var kingXPos = 0;

    //movement (y)
    var yForce = 0;
    var kingYPos = 202;

    //LV design
    var floorHeight = 150;

var draw = function() {

//background and basics
    background(255, 0, 0);
    image(getImage("creatures/Winston"), kingXPos, kingYPos, 50, 50);

//level features (only the floor right now)
    fill(0, 0, 0);
    rect(0, 250, 400, floorHeight);

//right movement
        if (keyIsPressed && keyCode === RIGHT) {
    kingXPos = kingXPos + xForce;
    xForce = xForce + 0.25;
    if (xForce >= maxSpeed && keyIsPressed) {
      xForce = maxSpeed;
    }
  }

//left movement
  if (keyIsPressed && keyCode === LEFT) {
    kingXPos = kingXPos + xForce;
    xForce = xForce - 0.25;
    if (xForce <= -maxSpeed && keyIsPressed) {
      xForce = -maxSpeed;
    }
  }

//jump (not yet functional)
  if (keyTyped && keyCode === UP && kingYPos === floorHeight + 50) {
      kingYPos = kingYPos + yForce;
      yForce = yForce - 0.5;

  }

//other physics
  if (!keyIsPressed) {
    kingXPos = kingXPos + xForce;
    if (xForce > 0) {
      xForce = xForce - 0.25;
    } 
    else if (xForce < 0) {
      xForce = xForce + 0.25;
    }
  }
};

1 个答案:

答案 0 :(得分:3)

对于刚开始的人来说,这是相当令人印象深刻的。您似乎对几何有直观的理解。但是,由于您的教育程度,您可能不会注意到一些领域知识。

在物理学中,描述运动的正确方程组是:

1. speed = change_in_location / time

2. acceleration = change_in_speed / time

注意:我在这里使用“速度”这个词,因为它的类型比“速度”短。正确的词在技术上是“速度”。物理速度意味着与速度略有不同。

您需要注意的另一件事是重力是一种加速形式。具体而言,它是向下加速度9.8m / s / s

所以改写以上所有内容:

new_location = (speed * time) + old_location

new_speed = (acceleration * time) + old_speed

如果你假设一个恒定时间动画循环,你可以假设time = 1.这样就简化为:

new_location = speed + old_location

new_speed = acceleration + old_speed

这足以模拟重力。因为引力只是一种加速度:

gravity = SOME_NUMBER; // tune this to get the gravity you want

kingYPos = kingYPos + kingYSpeed;

kingYSpeed = kingYSpeed + gravity;

跳跃只是让物体瞬间提升速度:

// jump:
kingYSpeed = -SOME_OTHER_NUMBER; // negative because "up"

注意:领域知识是编程人员必须了解的编程之外的知识才能解决特定问题。例如,编写会计软件的程序员应具备一定的会计知识。实际上,并非所有业内程序员都努力获取领域知识,因为有时会有系统分析师/顾问编写软件需求。但是当你编写自己的软件时,你别无选择,只能获得一些领域知识。