2014-12-05 2 views
0

Итак, я создаю реплику игры Candy Crush на Java. Моя проблема заключается в попытке создать прослушиватель событий для щелчка или зависания объектов. Я попытался использовать различные методы для использования ImageIcons и теперь с помощью прослушивателей событий использовать JLabels и использовать значки и пытаться определить, щелкнули ли JLabel.Как проверить положение мыши над 2D-массивом изображений для игры?

То, что я пытаюсь сейчас использовать прямоугольники и хитбоксы так:

public Rectangle mouseHitBox(MouseEvent e) 
{ 
    int x = (int)e.getLocationOnScreen().getX(); //Grab Mouse X Coordinate and set it as an Int 
    int y = (int)e.getLocationOnScreen().getY(); //Grab Mouse Y Coordinate and set it as an Int 
    mouse.setBounds(x,y,1,1); //Create Mouse Hitbox 

    return mouse; //Return it for Mouse Event 
} 

public Rectangle gemHitBox() 
{ 
    for (int i = 0; i < 8; i++) 
    { 
     for (int j = 0; j < 8; j++) //For loops to access all 81 gem images 
     { 
      int x = gemImage[i][j].getX(); // Get X coordinate of that specific array destination 
      int y = gemImage[i][j].getY(); // Get Y coordinate of that specific array destination 
      gem.setBounds(x,y,50,47); // Gem Hitbox 
     } 
    } 
    return gem; //Return it for Mouse Event 
} 

@Override 
public void mouseClicked(MouseEvent e) { 

    if(mouseHitBox(e).intersects(gemHitBox())) // If the Mouse Hitbox comes in contact with one of the array positions then 
    { 
     //Prepare to Swap Gems 
    } 


} 

Главный класс реализует MouseListener, поэтому я могу только иметь публичный недействительный mouseClicked.

Независимо от того, какой код contatined в слушателях мыши, он ВСЕГДА бросил это исключение:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at Game.mouseHitBox(Game.java:125) //this line: mouse.setBounds(x,y,1,1); 
at Game.mouseClicked(Game.java:147) //this line: if(mouseHitBox(e).intersects(gemHitBox())) 
at java.awt.Component.processMouseEvent(Component.java:6508) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:708) 
at java.awt.EventQueue$4.run(EventQueue.java:706) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

Я застрял на эту проблему в течение трех дней, и любые предложения, было бы здорово.

+1

'мышь' - null. – Kon

ответ

0

Вы проверили, что mouseHitBox возвращает что-то не null?

Стекловатка показывает, что этот метод возвращает null в этом случае.

Является ли мышь инициализирована в этом случае?

+0

Я понял, что я сделал, я забыл его инициализировать. Благодаря! – EricTurner3

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