Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX:碰撞仅适用于一个矩形_Java_Android_Libgdx_Collision Detection - Fatal编程技术网

Java LibGDX:碰撞仅适用于一个矩形

Java LibGDX:碰撞仅适用于一个矩形,java,android,libgdx,collision-detection,Java,Android,Libgdx,Collision Detection,在我的android游戏中,只要我的数组中只有一个矩形,冲突就会起作用,因此它适用于以下情况: rects = new Rectangle[1]; for(int i = 0; i < rects.length; ++i) rects[i] = new Rectangle(i * 150, 0, 150, 150); 我是这样用的: public boolean collision(Rectangle rect){ return (Intersector.overlaps(pla

在我的android游戏中,只要我的数组中只有一个矩形,冲突就会起作用,因此它适用于以下情况:

rects = new Rectangle[1];
 for(int i = 0; i < rects.length; ++i)
  rects[i] = new Rectangle(i * 150, 0, 150, 150);
我是这样用的:

public boolean collision(Rectangle rect){
 return (Intersector.overlaps(playerBound, rect));
}
for(int i = 0; i < rects.length; ++i){
 if(!collision(rects[i]))
  player.setY(player.getY() - 1f);
}
boolean collision = false;
for(int i = 0; i < rects.length; ++i){
    if(collision(rects[i]))
        collision = true;
}

if (collision == false)
    player.setY(player.getY() - 1f);
for(int i=0;i
playerBound的初始化如下:
playerBound=new矩形(player.getX(),player.getY(),player.getWidth(),player.getHeight()+1)


有什么问题?我不明白如果数组中只有一个矩形,但如果有更多矩形,它如何工作。

这是因为这里的代码片段中有一个逻辑错误:

for(int i = 0; i < rects.length; ++i){
    if(!collision(rects[i]))
        player.setY(player.getY() - 1f);
}
for(int i=0;i
检查多个矩形是否存在冲突。让我们假设数组中的第一个将引起冲突。好的,Y不会改变。现在有另一个矩形。第二个rect将导致碰撞。现在发生了什么?即使发生碰撞,也可以更改播放器的Y值

将其更改为以下内容:

public boolean collision(Rectangle rect){
 return (Intersector.overlaps(playerBound, rect));
}
for(int i = 0; i < rects.length; ++i){
 if(!collision(rects[i]))
  player.setY(player.getY() - 1f);
}
boolean collision = false;
for(int i = 0; i < rects.length; ++i){
    if(collision(rects[i]))
        collision = true;
}

if (collision == false)
    player.setY(player.getY() - 1f);
布尔冲突=false;
对于(int i=0;i
如果确定第二个新矩形位于大括号之间,请始终使用大括号在循环或if语句中包含功能。