2013-08-18 2 views
0

Я пытаюсь анимировать спрайт. Существует основной класс, содержащий объект игрока. этот объект игрока расширяет объект спрайта. объект игрока дает его массив изображений классу спрайтов, он должен переключаться между разными изображениями. Но теперь, когда я пытаюсь написать что-то с while(), я получаю исключение? Все работает нормально, но я просто не могу получить любой в то время как петли начали ...Пока цикл вызывает исключение?

класс игры рисует образ:

g2d.drawImage(player.getImage(),(int) player.getX(),(int) player.getY(), null); 

игрок расширяет класс спрайта. Это содержит координаты x и y.

public Player(double x, double y) { 
    bitmap = new Bitmap("/sprites.png"); 
    sprites = new BufferedImage[2]; 
    sprites[0] = bitmap.getSprite(2, 2, 48, 48); 
    sprites[1] = bitmap.getSprite(52, 2, 48, 48); 
    this.x = x; 
    this.y = y; 
    setImages(sprites); 
} 

Это конструктор класса игроков.

Однако, почему я не могу использовать циклы?

Вам нужен еще код?

Вот мое исключение

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at com.ochs.game.Game.paint(Game.java:59) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JLayeredPane.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
at java.awt.Container.paint(Unknown Source) 
at java.awt.Window.paint(Unknown Source) 
at javax.swing.RepaintManager$3.run(Unknown Source) 
at javax.swing.RepaintManager$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.access$1000(Unknown Source) 
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

Вот код game.java:

public class Game extends JPanel implements Runnable{ 

public static final int WIDTH = 320; 
public static final int HEIGHT = 240; 
public static final int SCALE = 2; 

public boolean isRunning; 

private Player player; 

public Game() { 
    start(); 
} 

public void start() { 
    isRunning = true; 
    new Thread(this).start(); 
} 

public void stop() { 
    isRunning = false; 
} 

public void run() { 
    init(); 
    while(isRunning) { 

     update(); 
     repaint(); 

     try { 
      Thread.sleep(5); 
     } catch (InterruptedException e) { 
      System.out.println("Failed to sleep"); 
     } 
    } 
} 

public void init() { 
    player = new Player(100, 100); 
} 

public void update() { 

} 

public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D)g; 
    g2d.drawImage(player.getImage(),(int) player.getX(),(int) player.getY(), null); 
} 

public static void main(String[] args) { 
    Game gameComponent = new Game(); 
    Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE); 

    JFrame frame = new JFrame("Invaders"); 
    frame.setVisible(true); 
    frame.setSize(size); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.add(gameComponent); 
} 
} 
+0

Вставить код Game.Java. –

+0

Добавлен код игры.java на вопрос – user2410644

+0

Что такое линия 59? – Pavlos

ответ

0

я понял, начиная While-цикл в пределах некоторое время петли не будет работать работает одновременно ... Я должен был попробовать что-то с «if» вместо этого ... Исчерпал из-за своих ошибок: D