无法检测到与多边形的碰撞
Can't detect collision with Polygon
一些背景-它是小行星游戏
我试图检测圆和多边形对象之间的碰撞,所以我使用 Polygon.contains() 和圆的坐标。
但由于某些未知原因,有时它实际上检测到碰撞:
当第一颗流星(多边形)出现时,我会尝试射击它(子弹是圆圈)并且它 可能 检测到它但不确定第二颗是否相同,依此类推-换句话说,检测并不总是有效。
代码:
public void run() {
super.run();
while (true){
decreaseArr(this.shapes[0].xpoints,1);
if (!Bullet.bulletList.isEmpty()){
for (int i = 0; i< Bullet.bulletList.size() ; i++){
Bullet currentBullet= Bullet.bulletList.get(i);
if (this.shapes[0].contains(currentBullet.x, currentBullet.y)){
System.out.println(meteorList.indexOf(this));
System.out.println("HIT!");
Bullet.bulletList.remove(currentBullet); //Delete bullet from screen
meteorList.remove(this); //Delete from screen
breakFlag=true;
System.out.println(Meteor.meteorList);
}
}
if (breakFlag)
break;
}
try {
TimeUnit.MILLISECONDS.sleep(meteorVelocity);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
(这是 Meteor class 中的 运行 方法,所以每个流星都有一个形状数组(现在它只有一个形状,但稍后我会添加更多))
编辑:
Some video footage(抱歉没早点编辑,刚回家:))
编辑 2:
重要说明:
每次我 运行 游戏机会是我 不会 能够摧毁与上次相同的流星 - 每次我得到不同的结果
对多边形进行任何更改后必须调用 invalidate()
一些背景-它是小行星游戏
我试图检测圆和多边形对象之间的碰撞,所以我使用 Polygon.contains() 和圆的坐标。 但由于某些未知原因,有时它实际上检测到碰撞: 当第一颗流星(多边形)出现时,我会尝试射击它(子弹是圆圈)并且它 可能 检测到它但不确定第二颗是否相同,依此类推-换句话说,检测并不总是有效。
代码:
public void run() {
super.run();
while (true){
decreaseArr(this.shapes[0].xpoints,1);
if (!Bullet.bulletList.isEmpty()){
for (int i = 0; i< Bullet.bulletList.size() ; i++){
Bullet currentBullet= Bullet.bulletList.get(i);
if (this.shapes[0].contains(currentBullet.x, currentBullet.y)){
System.out.println(meteorList.indexOf(this));
System.out.println("HIT!");
Bullet.bulletList.remove(currentBullet); //Delete bullet from screen
meteorList.remove(this); //Delete from screen
breakFlag=true;
System.out.println(Meteor.meteorList);
}
}
if (breakFlag)
break;
}
try {
TimeUnit.MILLISECONDS.sleep(meteorVelocity);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
(这是 Meteor class 中的 运行 方法,所以每个流星都有一个形状数组(现在它只有一个形状,但稍后我会添加更多))
编辑: Some video footage(抱歉没早点编辑,刚回家:))
编辑 2:
重要说明: 每次我 运行 游戏机会是我 不会 能够摧毁与上次相同的流星 - 每次我得到不同的结果
对多边形进行任何更改后必须调用 invalidate()