加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-有什么办法可以使圆圈从可移动对象的顶部反弹?

发布时间:2020-12-14 19:28:48 所属栏目:Java 来源:网络整理
导读:从本质上讲,我只需要一些有关如何使圆从活动对象反弹的指导.我遇到了麻烦,已经尝试了三个小时,因此向论坛寻求帮助.我尝试了多个“ if”语句,但显然我无法正确理解,因为没有一个起作用.谢谢 :) 我已经尝试了3个小时,用不同的if语句弄清楚了这一点. float x;f

从本质上讲,我只需要一些有关如何使圆从活动对象反弹的指导.我遇到了麻烦,已经尝试了三个小时,因此向论坛寻求帮助.我尝试了多个“ 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,5,20);
    rect(x+25,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

此外,重要的是要先进行命中测试,然后在物体反弹后再进行测试.一个好的样式是在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,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,20);

    ellipse(circle_x,25);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读