2016-01-18 2 views
2

им довольно новый для программирования, так что это может быть действительно очевидно, но когда я запускаю эту часть моего кодаJava Area.intersects (Прямоугольник) вне границ

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) 

Еще одна странная вещь, что когда вода пересекает игрок случай еще Alse получает triggerd половину времени

PS. Площадь воды построена из коллекции треугольников

+0

Вы изменяете 'water' в другой теме одновременно? – wero

+0

Итак, почему вы не проверяете, действительно ли у вас есть такое количество элементов в массиве? – Asakura

+0

@Asakura, потому что это внутренний член в 'java.awt.geom.Area' – wero

ответ

0

Если вы посмотрите на java.awt.geom.Area.getCachedBounds линии 433-434 (обратитесь к StackTrace), то вы найдете

private Rectangle2D getCachedBounds() { 
    ... 
    if (curves.size() > 0) {     // 433 
     Curve c = (Curve) curves.get(0);  // 434 

curves является членом Area типа Vector. Код проверяет, является ли curvesнепустым, а затем обращается к первому элементу. В этом случае возникает ArrayIndexOutOfBoundsException, что может произойти только тогда, когда curves- пусто.

Таким образом, должен существовать другой поток, который изменяет объект water между ними.

+0

я перезагружаю свою область воды после того, как я добавил все треугольники. Я думаю, что проблема – cockadoodledoo

+0

@cockadoodledoo вероятно. При перезапуске область устанавливает 'кривые' в новый пустой вектор. – wero

0

Я думаю, что эта функция пересечений не допускает ввода Rect. Я также советую вам убедиться, что ваш код находится на одном языке. Я знаю, что делают ваши переменные, потому что я сам голландский, но ради согласованности, а также для всех, кто умеет читать ваш код, я советую вам сделать все на английском.

+0

в javadoc это говорит о пересечении (Rectangle) r) https://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html – cockadoodledoo

Смежные вопросы