有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么当我有特定的坐标来检测球和砖块之间的碰撞时,球对象会与不可见的墙发生碰撞?

我想让球在任意给定的一侧与砖块单独碰撞,为此我设置了一个类来创建砖块,并包含了一个函数来检测球与砖块之间的碰撞,但它最终在我设置的边界之外创建了不可见的碰撞器。是什么导致了隐形对撞机

我尝试更改碰撞参数的变量和坐标,以考虑每个砖块的中心和左上角,以防坐标出现问题,但这只会使情况变得更糟。我还试着改变每一块砖之间的距离,但也没有成功。我也尝试过在不同的计算机上运行它,但没有效果,所以我认为这与内部软件问题或bug无关

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) 个答案

  1. # 1 楼答案

    我会尝试使用类似于Box2d的东西,因为碰撞检测和物理并不是那么容易。如果要实现弹性碰撞,仅检测一个点是否位于另一个点的内部是不够的。您必须在时间n和n+1为每个砖生成路径/线,并在此线上找到碰撞点。现在所有的砖块都在同时移动,所以看起来它们在碰撞中“跳跃”

    Here is a simple visualization