我对编程很新,所以这可能非常明显,但是当我运行我的代码部分时
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)
另一个奇怪的事情是,当水与玩家相交时,其他情况下会被触发一半的时间
PS。区域水是由三角形集合构建的
答案 0 :(得分:0)
我认为这个相交函数不允许Rect输入。我还建议您确保您的代码使用一种语言。我碰巧知道你的变量是做什么的,因为我自己是荷兰人,但为了保持一致性以及每个人都能阅读你的代码,我建议你用英语制作一切。
答案 1 :(得分:0)
如果您查看java.awt.geom.Area.getCachedBounds
第433-434行(请参阅您的堆栈跟踪),那么您会找到
private Rectangle2D getCachedBounds() {
...
if (curves.size() > 0) { // 433
Curve c = (Curve) curves.get(0); // 434
curves
是Area
类Vector
的成员。
代码检查curves
是否为空,然后访问第一个元素。
然后,这会引发ArrayIndexOutOfBoundsException
,这只有在curves
为空时才会发生。
因此必须有另一个线程来修改其间的water
对象。