首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中的跳转代码

javascript中的跳转代码
EN

Stack Overflow用户
提问于 2016-07-05 02:25:23
回答 1查看 5.8K关注 0票数 2

我11岁,刚开始编程,我正在用javascript在学校做一个简单的游戏平台。

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

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

我已经试过这样做了,但我也犯了一些可笑的错误。

下面是我的(非常坏的)代码:

代码语言: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;
    }
  }
};
EN

回答 1

Stack Overflow用户

发布于 2016-07-05 03:23:02

这对刚开始的人来说是相当令人印象深刻的。你似乎对几何学有直觉的理解。然而,有一些领域的知识,你可能不知道,因为你有多少教育。

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

代码语言:javascript
复制
1. velocity = change_in_location / time

2. acceleration = change_in_velocity / time

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

因此,重写上述所有内容:

代码语言:javascript
复制
new_location = (velocity * time) + old_location

new_velocity = (acceleration * time) + old_velocity

如果假设有一个恒定时间的动画循环,则可以假定time = 1。因此,这可以简化为:

代码语言:javascript
复制
new_location = velocity + old_location

new_velocity = acceleration + old_velocity

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

代码语言:javascript
复制
gravity = SOME_NUMBER; // tune this to get the gravity you want

kingYPos = kingYPos + kingYVelocity;

kingYVelocity = kingYVelocity + gravity;

要跳下去,只要让物体在速度上瞬间提高:

代码语言:javascript
复制
// jump:
kingYVelocity = -SOME_OTHER_NUMBER; // negative because "up"

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38194362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档