gpt4 book ai didi

java - 是什么导致 Mover 从屏幕上掉下来?

转载 作者:行者123 更新时间:2023-12-02 05:26:31 26 4
gpt4 key购买 nike

添加“重力”会使物体最终消失

老实说我找不到这个错误。

搬运工类

class Mover {
PVector acc;
PVector loc;
PVector vel;

Mover() {
loc = new PVector(width/2, height/2);
vel = new PVector(0, 0);
acc = new PVector(0, 0);
}

void update() {

// Mouse
//PVector mouse = new PVector(mouseX, mouseY);
//mouse.sub(loc);
//mouse.setMag(0.5);

//F = M * A
vel.add(acc);
loc.add(vel);
vel.limit(2);
}

void gravity() {
PVector grav = new PVector(0, 9.8);

acc.add(grav);
}

void wind(float wind_){
PVector wind = new PVector(wind_,0);
acc.add(wind);
}
void display() {
stroke(0);
fill(0, 255, 0);
ellipse(loc.x, loc.y, 20, 20);
}

void bounce() {
if ((loc.x > width) || (loc.x < 0)) {
vel.x *= -1;
acc.x *= -1;
}
if ((loc.y > height) || (loc.y < 0)) {
vel.y *= -1;
acc.y *= -1;
}
}

void edges() {
if (loc.x > width) {
loc.x = 0;
} else if (loc.x < 0) {
loc.x = width;
}
if (loc.y > height) {
loc.y = 0;
} else if (loc.y < 0) {
loc.y = height;
}
}
}

主文件

Mover b;


void setup() {
size(800, 600);
b = new Mover();
}

void draw() {
background(255);
b.gravity();
b.wind(0.5);
b.update();
b.bounce();
//b.edges();

b.display();
}

我希望球最终停留在屏幕底部

我得到的是它最终会消失。

另外,使发帖更容易的新助手让我在这个问题上添加更多内容,但我所说的实际上就是我要说的一切

最佳答案

当检测到与地面或天花板发生碰撞时,您必须将球的位置限制在窗口范围内:

class Mover {

// [...]

void bounce() {

// [...]

if ((loc.y > height) || (loc.y < 0)) {
vel.y *= -1;
acc.y *= -1;
loc.y = loc.y > height ? height : 0; // limit y in the range [0, height]
}
}
}

由于重力不断地添加到加速度 vector (b.gravity();),如果位置在地面以下,球将稍微去不到任何地方。请注意,如果速度 vector (vel) 太小而无法将球提升到地面以上,则再次满足条件 loc.y > height 并且加速度会转向再次朝向 acc.y *= -1

<小时/>

一个选项是修复方法边缘:

class Mover {

// [...]

void edges() {
if (loc.x > width) {
loc.x = width;
} else if (loc.x < 0) {
loc.x = 0;
}
if (loc.y > height) {
loc.y = height;
} else if (loc.y < 0) {
loc.y = 0;
}
}

并通过在draw()中调用b.edges()来限制球的位置:

void draw() {
background(255);

b.wind(0.5);
b.gravity();
b.update();
b.bounce();
b.edges();

b.display();
}

关于java - 是什么导致 Mover 从屏幕上掉下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56227328/

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