Note that there are some explanatory texts on larger screens.

plurals
  1. POSprite spawning on particular JPanel
    primarykey
    data
    text
    <p>I am working on multiplayer game where when the server sends distinct message, ie. type of enemy and number of enemies. that particular sprite loads onto screen. I have 4 views, seperated by CardLayout and buttons on the top to switch between screens.</p> <p>Here's the chain that I have set up. When I try to draw the enemies.. I get an error.</p> <p>In Main class I have this method:</p> <pre><code>public void handleAttack(String message){ ViewA.spawnEnemy(type,amt); } </code></pre> <p>This is the class for <code>ViewA</code> which has the <code>spawnEnemy()</code> method.</p> <pre><code>public class BattleView extends JPanel implements ActionListener { private Player player; private Timer timer; private int B_WIDTH; private int B_HEIGHT; private boolean ingame; private ArrayList aliens; public BattleView(Player player) { this.player = player; addKeyListener(new TAdapter()); setFocusable(true); setBackground(Color.RED); setDoubleBuffered(true); setSize(652, 480); ingame = true; timer = new Timer(5, this); timer.start(); } public void addNotify() { super.addNotify(); B_WIDTH = getWidth(); B_HEIGHT = getHeight(); super.setPreferredSize(new Dimension(B_WIDTH,B_HEIGHT)); } public void spawnEnemy(int type, int amount) { aliens = new ArrayList(); for (int i=1; i&lt;amount+1; i++ ) { aliens.add(new Enemy(0-i*40,400)); System.out.println("Attack Message Recieved "+i); } } public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D)g; g2d.drawImage(background, 0, 0, null); if (player.isVisible()){ g2d.drawImage(player.getImage(), player.getX(), player.getY(), this); } ArrayList ms = player.getMissiles(); /* for (int i = 0; i &lt; ms.size(); i++) { Missile m = (Missile)ms.get(i); g2d.drawImage(m.getImage(), m.getX(), m.getY(), this); }*/ /* for (int i = 0; i &lt; aliens.size(); i++) { Enemy a = (Enemy)aliens.get(i); if (a.isVisible()){ g2d.drawImage(a.getImage(), a.getX(), a.getY(), this); } }*/ g2d.setColor(Color.BLACK); g2d.drawString("BattleView: ", 5, 15); Toolkit.getDefaultToolkit().sync(); g.dispose(); } @Override public void actionPerformed(ActionEvent e) { /* if (aliens.size()==0) { //send message to server that enemies have been killed }*/ ArrayList ms = player.getMissiles(); /* for (int i = 0; i &lt; ms.size(); i++) { Missile m = (Missile) ms.get(i); if (m.isVisible()){ m.move(); }else{ ms.remove(i); } }*/ /* for (int i = 0; i &lt; aliens.size(); i++) { Enemy a = (Enemy) aliens.get(i); if (a.isVisible()){ a.move(); }else{ aliens.remove(i); } }*/ player.move(); checkCollisions(); repaint(); } public void checkCollisions() { /* Rectangle r3 = player.getBounds(); for (int j = 0; j&lt;aliens.size(); j++) { Enemy a = (Enemy) aliens.get(j); Rectangle r2 = a.getBounds(); if (r3.intersects(r2)) { player.setVisible(false); a.setVisible(false); ingame = false; } }*/ ArrayList ms = player.getMissiles(); /* for (int i = 0; i &lt; ms.size(); i++) { Missile m = (Missile) ms.get(i); Rectangle r1 = m.getBounds(); for (int j = 0; j&lt;aliens.size(); j++) { Enemy a = (Enemy) aliens.get(j); Rectangle r2 = a.getBounds(); if (r1.intersects(r2)) { m.setVisible(false); a.setVisible(false); } // r1.intersects } // for aliens.size() }*/ // for ms.size() } private class TAdapter extends KeyAdapter { public void keyReleased(KeyEvent e) { player.keyReleased(e); } public void keyPressed(KeyEvent e) { player.keyPressed(e); } } } </code></pre> <p>This part fires five <code>System.out.println("Attack Message Recieved "+i);</code> when server sends message. So if server sends 1,5.. 5 units of type 1 are "recieved" and <code>System.out.println</code> prints 5 times.</p> <p>Now when I try to use <code>paint(g)</code> to draw the enemy units using the for-loop.. I get an error When I comment out the for-loop everything compiles fine and loads (but no screen sprites are created of the enemy, only the <code>System.out.println</code> fires the N number of times sent via the server.</p> <p>How can I get it to draw the enemies right after the <code>System.out.println</code> fires?</p> <p>This is the error:</p> <pre><code>at ViewA.paint(ViewA.java:85) 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._paintImmediately(Unknown Source) at javax.swing.JComponent.paintImmediately(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$700(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$000(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) </code></pre> <p>at ViewA.paint(ViewA.java:85)</p> <p>corresponds to this line:</p> <blockquote> <pre><code> for (int i = 0; i &lt; aliens.size(); i++) { Enemy a = (Enemy)aliens.get(i); if (a.isVisible()) g2d.drawImage(a.getImage(), a.getX(), a.getY(), this); } g2d.setColor(Color.BLACK); g2d.drawString("BattleView: ", 5, 15); </code></pre> </blockquote>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload