2010-05-31 44 views
0

我修复了我以前的问题。但现在当我的瓷砖地图...如果我尝试去9瓦的权利,并试图让到第9瓦....我会得到这个错误:Java Applet - ArrayIndexOutOfBoundsException(pt 2)

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 8 
    at tileGen.blocked(tileGen.java:125) 
    at tileGen.keyPressed(tileGen.java:58) 
    at java.awt.Component.processKeyEvent(Component.java:6221) 
    at java.awt.Component.processEvent(Component.java:6040) 
    at java.awt.Container.processEvent(Container.java:2041) 
    at java.awt.Component.dispatchEventImpl(Component.java:4630) 
    at java.awt.Container.dispatchEventImpl(Container.java:2099) 
    at java.awt.Component.dispatchEvent(Component.java:4460) 
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676) 
    at java.awt.Component.dispatchEventImpl(Component.java:4502) 
    at java.awt.Container.dispatchEventImpl(Container.java:2099) 
    at java.awt.Component.dispatchEvent(Component.java:4460) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

这里是代码:http://www.so.pastebin.com/hYkpQf13

我已经尝试了许多解决方案,所有这些都失败了。

+0

我看到很多System.out.println(),你能显示那个输出的(最后一行)吗? – 2010-05-31 20:35:15

回答

1

我相信问题是你混淆了坐标。当它应该是相反方向(或者你应该镜像你的板子)时,你使用X作为左右坐标和Y作为上下

一旦往右走,您就增加了X,并在您的主板上,这意味着您可以有效地将一行向下移动。由于董事会有8行,第9步会让你超出界限。

+0

OH YES !!!我看到问题了! :) 谢谢。这是假设是ty,tx ...:D – nn2 2010-05-31 20:37:09

+0

另一件事...你认为有更好的方法来阻止瓷砖?那样它可以只是一种方法而且简单? – nn2 2010-05-31 20:38:31

+0

@丹,我现在对此没有任何明智的见解。我会离开'blocking',因为它对我来说代码更具可读性。 OTOH的测试表达式在这种形式下看起来更简单,更易读:'if(!blocked(x1,y1))' - 但这是一个小问题。 – 2010-05-31 21:05:59