gpt4 book ai didi

javascript - 如何在 javascript 上创建一个简单的重力引擎

转载 作者:行者123 更新时间:2023-11-29 10:57:17 24 4
gpt4 key购买 nike

我正在尝试使用 P5.js 库在 javascript 中制作一个简单的动画。我想让一个球出现在某个高度,然后让它落下并弹跳直到它停下来。

我不是在寻找外部库,只是 P5。

我的代码是这样的:

function Ball() {
this.diameter = 50;
this.v_speed = 5;
this.ypos = height/2 - 100;
this.xpos = width/2;

this.update = function(){
this.ypos = this.ypos + this.v_speed;
this.ypos = constrain(this.ypos, this.diameter/2, height-this.diameter/2);
}

this.show = function(){
ellipse(this.xpos, this.ypos, this.diameter);
fill(255);
}
}

var ball;

function setup() {
createCanvas(600, 600);
ball = new Ball();
}

function draw() {
background(0);
ball.update();
ball.show();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.js"></script>

有人可以帮助我吗?非常感谢

最佳答案

首先,您必须将起始速度设置为 0 并定义重力:

this.v_speed = 0;
this.gravity = 0.2;

可以直接应用于您的示例的有效 update 方法如下所示:

this.starty = height/2 - 100;
this.endy = height-this.diameter/2;
this.update = function(){

this.v_speed = this.v_speed + this.gravity;
this.ypos = this.ypos + this.v_speed;

if (this.ypos >= this.endy){
this.ypos = this.endy;
this.v_speed *= -1.0; // change direction
this.v_speed = this.v_speed*0.9;
if ( Math.abs(this.v_speed) < 0.5 ) {
this.ypos = this.starty;
}
}
}

关键是降低速度,球在地面弹跳时改变方向:

this.v_speed *= -1.0;
this.v_speed = this.v_speed*0.9;

另请参阅 Bouncing Balls, struggling with getting more than 1 (processing)

请参阅示例,其中我将建议应用于您的原始代码:

function Ball() {

this.diameter = 50;
this.v_speed = 0;
this.gravity = 0.2;
this.starty = height/2 - 100;
this.endy = height-this.diameter/2;
this.ypos = this.starty;
this.xpos = width/2;

this.update = function(){

this.v_speed = this.v_speed + this.gravity;
this.ypos = this.ypos + this.v_speed;

if (this.ypos >= this.endy){
this.ypos = this.endy;
this.v_speed *= -1.0; // change direction
this.v_speed = this.v_speed*0.9;
if ( Math.abs(this.v_speed) < 0.5 ) {
this.ypos = this.starty;
}
}
}

this.show = function(){
ellipse(this.xpos, this.ypos, this.diameter);
fill(255);
}
}

var ball;

function setup() {
createCanvas(600, 600);
ball = new Ball();
}

function draw() {
background(0);
ball.update();
ball.show();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.js"></script>

Demo

关于javascript - 如何在 javascript 上创建一个简单的重力引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com