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