Java区域。相交(矩形)超出边界
我对编程相当陌生,所以这可能非常明显,但当我运行这部分代码时Java区域。相交(矩形)超出边界,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我对编程相当陌生,所以这可能非常明显,但当我运行这部分代码时 public void movePlayer(){ Rectangle playerRect = new Rectangle((int) player.getxPositie(),(int) player.getyPositie()-12,20,35); if(water.intersects(playerRect)){//out of bounds???? player.swim=true;
public void movePlayer(){
Rectangle playerRect = new Rectangle((int) player.getxPositie(),(int) player.getyPositie()-12,20,35);
if(water.intersects(playerRect)){//out of bounds????
player.swim=true;
jump=true;
if(SplashP == true){
SplashP=false;
Splash((int) (player.getxPositie()/5),versnelling*12);
}else{}
}else{ player.swim=false;
SplashP = true;}
}
...
我得到以下例外,我不知道为什么
Exception in thread "Thread-20" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
at java.util.Vector.get(Vector.java:748)
at java.awt.geom.Area.getCachedBounds(Area.java:434)
at java.awt.geom.Area.intersects(Area.java:606)
at java.awt.geom.Area.intersects(Area.java:618)
at Model.movePlayer(Model.java:723)
at Animator.run(Animator.java:19)
at java.lang.Thread.run(Thread.java:745)
另一件奇怪的事情是,当水与玩家相交时,else的情况有一半会被触发
PS.区域水是由三角形集合构建的我认为此相交函数不允许矩形输入。我还建议您确保代码使用一种语言。我碰巧知道你的变量是做什么的,因为我自己也是荷兰人,但为了一致性以及每个人都能阅读你的代码,我建议你用英语制作所有的东西 如果您查看
java.awt.geom.Area.getCachedBounds
第433-434行(请参阅stacktrace),您会发现
private Rectangle2D getCachedBounds() {
...
if (curves.size() > 0) { // 433
Curve c = (Curve) curves.get(0); // 434
曲线
是向量
类型的区域
的成员。
代码检查曲线
是否为非空,然后访问第一个元素。
然后,这会引发一个ArrayIndexOutOfBoundsException
,该异常仅在曲线
为空时发生
因此,必须有另一个线程来修改中间的
water
对象。您是否同时在另一个线程中更改water
?那么为什么不检查数组中是否真的有这么多的元素?@Asakura,因为它是java.awt.geom.Area
中的内部成员不确定线程是如何执行的工作(因为我有一个线程,我从中调用所有方法,但我仍然有多个线程),但当我现在运行游戏时,验证显示“thread-1”。所以我想是的,你是每次运行代码的这一部分还是偶尔会遇到这个异常?在javadoc中,它说交叉点(矩形)r)我在添加所有三角形后重置了我的区域水。我想这就是问题所在problem@cockadoodledoo可能重置后,区域将曲线设置为新的空向量。