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

时间:2018-09-12 20:59:43

标签: java processing

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

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

问题:所以我目前面临两个问题。一种是我知道如何使运动对象与静态对象发生碰撞,但是我遇到两个运动对象时遇到困难,任何示例通常都是矩形矩形或椭圆形椭圆,这无济于事,因为椭圆与矩形的碰撞与两个相同的形式互相碰撞。

第二个问题,我知道我必须使用布尔值,但是由于椭圆是在随机坐标上,因此我使用的是float而不是int,布尔值对浮点数不起作用。

最后一个问题是,如果我需要布尔值的x和y,它们不仅是浮点型的,而且还放置在使其无法访问的类中(请参见下面的代码)。我可以复制相同的浮点数,并将它们放在定义初始int的位置,除非我不知道这样做是多么糟糕。

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;
        }
    }
}

0 个答案:

没有答案