javascript - 处理弹跳球的JS模拟(弹性碰撞)

标签 javascript processing.js

我编写了一个程序,显示一个球下落,然后在落地后弹起。有时,当它弹起时,它不会达到其初始高度。这是一个 JS fiddle 来展示我的意思:

https://jsfiddle.net/abq4zvsx/

我希望球表现得好像它是完全有弹性的。也就是说,我希望它从某个初始高度开始,并在弹跳时再次达到该初始高度,依此类推,永远。

2017 年 5 月 25 日编辑: 我从绘图函数中删除了一些方法。只有 4 个在运行:绘制、重力和弹跳决定图形。 ballArray.heightStamp 触发一条新线添加到数组 lineArray 中,以绘制球每次弹跳时达到的高度。

我改变了 fiddle 来反射(reflect)这一点。我删除了一些可能掩盖最相关代码的方法。

2017 年 5 月 30 日编辑:我的写法不同。我不太熟悉这样写,所以这个例子要简单得多。完整代码如下:

void setup() {  
  size(800, 400);
}

class Ball {

  float x = 400;
  float y = 50;
  float d = 14;
  float r = 7;
  float vy = 0;
  float ay = 0.2;

  void display() {
    ellipse(x, y, d, d);
  }
  void gravity() {
    vy += ay;
    y += vy;
  }
  void bounce() {
    if ((y+r)>height) {
      vy *= -1;
      y = height - r;
    }
  }

} //closing ball class

Ball ball = new Ball();

void draw() {
  background(235, 245, 255);
  ball.display();
  ball.gravity();
  ball.bounce();
}

2017 年 6 月 2 日编辑:我更仔细地检查了为报告类似问题的其他人提供的解决方案,但他们没有解决我的问题。上面的代码与 fiddle 中的代码不同,但我认为它们本质上是相同的。

最佳答案

一个简单的“修复”就是让你的弹跳更加“对称”:

ball.prototype.bounce = function() {
  if ((this.y+this.r)>=height) {
    this.vy *= -1;
    this.y += this.vy; // Add this line
  }
};

为了获得更强大的方法,您应该使用 more sophisticated integrator根据速度和力的速度更新您的位置。

关于javascript - 处理弹跳球的JS模拟(弹性碰撞),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44170441/

相关文章:

javascript - 正确填充 D3 创建的增强 svg 路径

Javascript处理.js 为什么图像不显示?

javascript - processing.js 和 minim.js 中的节拍/赫兹检测不起作用

javascript - 处理代码可以在本地运行,但不能在 javascript 中运行

javascript - 是否可以在 Processing.JS 中生成正弦音调?

javascript - Sequelize中如何进行算术运算?

javascript - 爱彼迎/javascript : What does this mean: "These methods may be shadowed by properties ..."?

Javascript 按类选择元素,更改它们的最大高度,然后更改单击的元素最大高度

javascript - 蛇游戏与自身碰撞

javascript - 存储越来越多的数字以继续刷新?