Почему объект шара сталкивается с невидимыми стенами, когда у меня есть определенные координаты, чтобы обнаружить столкновение между шаром и кирпичами? - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу, чтобы мяч сталкивался с кирпичами по отдельности, с любой стороны, и для этого я создал класс для создания кирпичей и включил функцию обнаружения столкновения между шаром и кирпичами, но это закончилосьсоздание невидимых коллайдеров за пределами установленных границ.Что вызывает невидимые коллайдеры?

Я попытался изменить переменные и координаты параметров столкновения, чтобы учесть центр и верхний левый угол каждого кирпича, на случай, если это была проблема с координатами, но это только ухудшило ситуацию.Я также попытался изменить расстояние между каждым кирпичиком и не добился успеха в этом тоже.Я также попытался запустить его на разных компьютерах безрезультатно, поэтому я не думаю, что это связано с внутренней проблемой или ошибкой программного обеспечения.

int Posx = 150;
int Posy = 150;
int Velx = 5;
int Vely = 5;
int value = 0;
int BouncePosX = 800;
int BouncePosY = 900;
int BounceLeft = -35;
int BounceRight = 35;
int lifeCount = 3;
int points = 0;
int numBricks = 5;
Bricks[] bricks = new Bricks[numBricks];

// Объявляет переменные, которые будут отслеживать положение искорость формы вокруг экрана //

void setup() {
  size(1600,1000);
  frameRate(60);
  for (int i = 0; i<numBricks; i++){
    float x = 10 +(i*70);
    float y = 100;
    bricks[i] = new Bricks(x,y,50.0,30.0);


void draw(){
  background(0,255,0);
  fill(255,0,255);
  rect(BouncePosX,BouncePosY, 100, 5);
  fill(255,0,0);
  arc(Posx,Posy,20,20,0,TWO_PI);
  for (int i = 0; i<numBricks; i++){
    bricks[i].display();
    bricks[i].collide();


class Bricks {
  float x,y;
  float posBrickX,posBrickY;
  Bricks[] others;

  Bricks(float xin, float yin, float posBrickXin, float posBrickYin) {
    x = xin;
    y = yin;
    posBrickX = posBrickXin;
    posBrickY = posBrickYin;


}
  void collide() {



        if ((Posx <= x+25) && (Posy <= y+15) && (Posy >= y-15) || (Posx 
>= x-25) && (Posy <= y+15) && (Posy >=y-15)) {
          Velx= Velx*-1;
          points = points++;
        }
        if ((Posy <= y+15) && (Posx <= x+25) && (Posx >= x-25) || (Posy 
>= y-15) && (Posx <= x+25) && (Posx >= x-25)){
          Vely = Vely*-1;
          points = points++;
        }  

 void display() {
   rect(x,y,posBrickX,posBrickY);
}

Я ожидаю, что обнаружение столкновения в конечном итоге обнаружит каждую сторону каждого кирпича, используя координаты и определив область как столкнувшуюся, но пока что это простосозданы случайные зоны столкновения по всему экрану.

1 Ответ

0 голосов
/ 19 февраля 2019

Я бы попробовал использовать что-то вроде Box2d, поскольку обнаружение столкновений и физика не так просты.Простого определения, находится ли точка внутри другой, недостаточно, если вы хотите добиться упругого столкновения.Вы должны сгенерировать путь / линию для каждого кирпича в моменты времени n и n + 1 и найти точку столкновения на этой линии.Теперь все кирпичи движутся одновременно, поэтому кажется, что они «перепрыгивают» через столкновение.

Here is a simple visualization

...