gpt4 book ai didi

java - 有没有办法让圆圈从可移动物体的顶部反弹?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:56 25 4
gpt4 key购买 nike

本质上,我只是想要一些关于如何使圆圈从可移动物体上反弹的指导。我遇到了麻烦,已经尝试了三个小时,因此转向论坛寻求帮助。我尝试了多个“if”语句,但显然我没有正确理解,因为没有一个在工作。谢谢:)

我已经尝试了 3 个小时来使用不同的 if 语句来解决这个问题。

float x;
float easing = 1;
float circle_x = 1;
float circle_y = 30;
float rad = 12.5;
float gravity = 0.98;
float move_x = 5;
float move_y = 5;

void setup() {
size(640, 480);
frameRate(60);
}

void draw() {
background(#87CEEB);

fill(#7cfc00);
rect(0, 430, 640, 80);

float targetX = mouseX;
float dx = targetX - x;
x += dx * easing;

fill(#000000);
rect(x, 400, 30, 30);
rect(x-20, 390, 70, 10);
rect(x, 430, 5, 20);
rect(x+25, 430, 5, 20);


ellipse(circle_x, circle_y, 25, 25);
circle_x = circle_x + move_x;
circle_y = circle_y + move_y;

if (circle_x > width) {
circle_x = width;
move_x = -move_x;
}

if (circle_y > height) {
circle_y = height;
move_y = -move_y;
}

if (circle_x < 0) {
circle_x = 0;
move_x = -move_x;
}

if (circle_y < 0) {
circle_y = 0;
move_y= -move_y;
}
}

将任何变量插入 if 语句并只接收返回:球被我的鼠标光标(而不是对象)反弹,出现故障的圆圈和断断续续的图像。

最佳答案

必须检查球的x坐标是否在对象的范围内(objW是对象的宽度):

circle_x > x && circle_x < x + objW

如果球的y坐标达到物体的高度(objH是物体的高度,circleR是球的半径):

circle_y > objH - circleR

此外,重要的是首先进行 HitTest ,然后再进行对象是否弹回地面的测试。一个好的风格是在 else if 语句中执行此操作:

int objX1 = -20;
int objX2 = 70;
int objH = 390;
int circleR = 25/2;
if (circle_x > x + objX1 && circle_x < x + objX2 && circle_y > objH - circleR ) {
circle_y = objH-circleR;
move_y = -move_y;
}
else if (circle_y > height) {
circle_y = height;
move_y = -move_y;
}
else if (circle_y < 0) {
circle_y = 0;
move_y= -move_y;
}

此外,我建议先计算球的位置,然后在当前位置绘制球:

float x;
float easing = 1;
float circle_x = 1;
float circle_y = 30;
float rad = 12.5;
float gravity = 0.98;
float move_x = 5;
float move_y = 5;

void setup() {
size(640, 480);
frameRate(60);
}

void draw() {
background(#87CEEB);

fill(#7cfc00);
rect(0, 430, 640, 80);

float targetX = mouseX;
float dx = targetX - x;
x += dx * easing;

circle_x = circle_x + move_x;
circle_y = circle_y + move_y;
if (circle_x > width) {
circle_x = width;
move_x = -move_x;
}
else if (circle_x < 0) {
circle_x = 0;
move_x = -move_x;
}

int objW = 70;
int objH = 390;
int circleR = 25/2;
if (circle_x > x && circle_x < x + objW && circle_y > objH-circleR ) {
circle_y = objH-circleR;
move_y = -move_y;
}
else if (circle_y > height) {
circle_y = height;
move_y = -move_y;
}
else if (circle_y < 0) {
circle_y = 0;
move_y= -move_y;
}

fill(#000000);
rect(x, 400, 30, 30);
rect(x-20, 390, 70, 10);
rect(x, 430, 5, 20);
rect(x+25, 430, 5, 20);

ellipse(circle_x, circle_y, 25, 25);
}

关于java - 有没有办法让圆圈从可移动物体的顶部反弹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545884/

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