Java Area.Intersects(Rectangle)超出范围

时间:2016-01-18 10:43:55

标签: 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;
        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。区域水是由三角形集合构建的

2 个答案:

答案 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

curvesAreaVector的成员。 代码检查curves 是否为空,然后访问第一个元素。 然后,这会引发ArrayIndexOutOfBoundsException,这只有在curves 为空时才会发生。

因此必须有另一个线程来修改其间的water对象。