移动椭圆和矩形(多部分)的碰撞检测问题

最近,我一直在使用 Java 在处理中使用 Arduino 开发游戏,对于这个问题,我删除了所有不必要的 Arduino 代码,只显示我遇到问题的代码,这些代码与处理中的 Java 直接相关。


目标:所以我现在的目标是在一些随机落下的椭圆和屏幕底部来回弹跳的矩形之间进行碰撞检测。这个想法是在物体碰撞时做一些真正简单的事情,比如把背景颜色变成红色。


问题:所以我目前面临两个问题。一个是我知道如何使移动物体与静态物体碰撞,但是我在处理两个移动物体时遇到困难,任何示例通常都是矩形上的矩形或椭圆椭圆,这没有帮助,因为椭圆撞击矩形与两个相同的形式相互碰撞。


第二个问题我知道我必须使用布尔值,但是因为椭圆是随机坐标,所以我使用的是浮点数而不是整数,布尔值不能与浮点数一起使用。


最后一个快速问题是,如果我需要布尔值的 x 和 y,它们不仅是浮动的,而且它们被放置在一个使它们无法访问的类中(请参阅下面的代码)。我可以复制相同的浮点数并将它们放在定义初始整数的地方,除非我不知道做这样的事情有多糟糕。


int direction1 = 100;

int speedX = 12;

int heightWidth=40;

int bounceSize= 40;

int ellipseSizeone=40;

int ellipseSizetwo=50;

float x = random(800);

float y = random(-500);


Meteor meteors;

int total = 10;

Meteor[] fall = new Meteor[total]; 


void setup() {

    size (800, 500);

    background(0);

    smooth();

    noStroke();


    for (int i = 0; i < fall.length; i++) {


        fall[i] = new Meteor(); 

        meteors = new Meteor();

    }

}


void draw() {

   background(0);


   direction1+=speedX;

   if (direction1 > width-bounceSize) {

       direction1 = width-bounceSize;

       speedX = -12;

   }

   if (direction1 < 0) {

       direction1 = 0;

       speedX = 12;

   }

   rect(direction1, 450, heightWidth, heightWidth);

   fill(0,20);

   rect(0,0,800,500);


   for (int i = 0; i < fall.length; i+=3) {

       fall[i].fall();

   }

   fill(0,255,0);

}


class Meteor {

    float x = random(800);

    float y = random(-500);


    void fall() {

        y = y + 3;

        fill(random(200),0,0);

        ellipse(x, y, ellipseSizeone, ellipseSizetwo);


        if(y>height){

            x = random(800);

            y = 0;

        }

    }

}


MMMHUHU
浏览 231回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java