javascript - 在javascript中跳转代码

标签 javascript physics

我 11 岁,刚接触编程,我正在学校使用 javascript 为游戏制作一个简单的平台游戏。

现在我正在编写让 Angular 色跳跃的代码。它比 Angular 色上升然后下降更复杂,因为我希望 Action 流畅且看起来逼真。 Angular 色跳跃时快速离开地面,越往上走越慢,到达一定点后开始缓慢下落。它会在下落时加速(可能通过使用某种类型的加速度变量),然后撞到地面并完全停止。

我希望 Angular 色能够在空中左右移动,如果按住键,跳一次,然后当 Angular 色落地时,如果还按住键,再跳一次。 (游戏中的 Angular 色应该可以跳得很高)

我已经尝试这样做了,但是我遇到了一些可笑的错误。

这是我的(非常糟糕的)代码:

    //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. velocity = change_in_location / time

2. acceleration = change_in_velocity / time

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

所以重写以上所有内容:

new_location = (velocity * time) + old_location

new_velocity = (acceleration * time) + old_velocity

如果您假设一个恒定时间的动画循环,您可以假设 time = 1。这样可以将其简化为:

new_location = velocity + old_location

new_velocity = acceleration + old_velocity

这足以模拟重力。由于重力只是一种加速度:

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

kingYPos = kingYPos + kingYVelocity;

kingYVelocity = kingYVelocity + gravity;

要跳跃,只需给物体一个瞬间的速度提升:

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

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

关于javascript - 在javascript中跳转代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194362/

相关文章:

c++ - 撞墙后寻找球的方向

c++ - 如何防止 OgreBullet 胶囊翻倒?

javascript - 返回 $http 中的父函数

javascript - 在 map 函数javascript上连接字符串

javascript - 如何同时调用两个api?

javascript - 在移动设备上查看时如何将导航项移出屏幕

javascript - 用数组元素替换字符串键

python - 如何绘制抛射体在重力、浮力和空气阻力作用下的运动?

math - 寻找二维空间中点的时间限制路径

python - 数值积分过程中两个物体之间的距离保持恒定