Java Mehrer Objekte bewegen

RauchenderDachs

Cadet 4th Year
Registriert
Dez. 2012
Beiträge
70
Hi Leute,
ich versuche gerade mehrer gleiche Objekte (Creeps) auf einer vordefinierten Bahn zu bewegen. Dazu benutze ich folgenten Quellcode.
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package towerdefencev4;

import javax.swing.*;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 */
public class GUI extends JFrame implements Runnable{

    /**
     * @param args the command line arguments
     */
  private Image dbImage;
    private Graphics dbGraphics;
    static private Creep  dasCreep[] = new Creep[5];
    
    public GUI(String title){
        super(title);
       for(int n=0 ;n<dasCreep.length;n++){
        dasCreep[n]= new Creep(40,25,this);
        System.out.println(n);
    }
    }
    public static void main(final String[] args) {
    final GUI dieOberfläche = new GUI("TowerDefencev4");;
    dieOberfläche.setSize(400, 600);
    dieOberfläche.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    new Thread(dieOberfläche).start();
    dieOberfläche.setVisible(true);
    dieOberfläche.add(new JPanel() {
     
    @Override
    public void paint(final Graphics g) {
    super.paint(g);
    //Hintergrund
    g.drawImage(Toolkit.getDefaultToolkit().getImage("../img/ground.gif"), 0, 0, this);
    //Creep
    for(int n=0 ;n<dasCreep.length;n++){
        dasCreep[n].paintcreep(g);
        System.out.println(n);
    }
    
    }
    });
    }
     
    @Override
    public void run() {
        while(true){
           for(int n=0;n<dasCreep.length;n++){
                dasCreep[n].move();
                System.out.println(n);
           }
           repaint();
            try {
                Thread.sleep(20);
            } catch (InterruptedException ex) {
                Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    public void update(Graphics g)
   {
      //Double-Buffer initialisieren
      if (dbImage == null) {
         dbImage = createImage(
            this.getSize().width,
            this.getSize().height
         );
         dbGraphics = dbImage.getGraphics();
      }
      //Hintergrund löschen
      dbGraphics.setColor(getBackground());
      dbGraphics.fillRect(
         0,
         0,
         this.getSize().width,
         this.getSize().height
       );
      //Vordergrund zeichnen
      dbGraphics.setColor(getForeground());
      paint(dbGraphics);
      //Offscreen anzeigen
      g.drawImage(dbImage,0,0,this);
   }
    
    }
Es wird allerdings immer nur ein Objekt dargestellt und bewegt. Die anderen 4 erscheinen gar nicht auf dem Bildschirm.

Hier noch der Quellcode con Creep.java:
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package towerdefencev4;

import javax.swing.*;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 */
public class GUI extends JFrame implements Runnable{

    /**
     * @param args the command line arguments
     */
  private Image dbImage;
    private Graphics dbGraphics;
    static private Creep  dasCreep[] = new Creep[5];
    
    public GUI(String title){
        super(title);
       for(int n=0 ;n<dasCreep.length;n++){
        dasCreep[n]= new Creep(40,25,this);
        System.out.println(n);
    }
    }
    public static void main(final String[] args) {
    final GUI dieOberfläche = new GUI("TowerDefencev4");;
    dieOberfläche.setSize(400, 600);
    dieOberfläche.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    new Thread(dieOberfläche).start();
    dieOberfläche.setVisible(true);
    dieOberfläche.add(new JPanel() {
     
    @Override
    public void paint(final Graphics g) {
    super.paint(g);
    //Hintergrund
    g.drawImage(Toolkit.getDefaultToolkit().getImage("../img/ground.gif"), 0, 0, this);
    //Creep
    for(int n=0 ;n<dasCreep.length;n++){
        dasCreep[n].paintcreep(g);
        System.out.println(n);
    }
    
    }
    });
    }
     
    @Override
    public void run() {
        while(true){
           for(int n=0;n<dasCreep.length;n++){
                dasCreep[n].move();
                System.out.println(n);
           }
           repaint();
            try {
                Thread.sleep(20);
            } catch (InterruptedException ex) {
                Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    public void update(Graphics g)
   {
      //Double-Buffer initialisieren
      if (dbImage == null) {
         dbImage = createImage(
            this.getSize().width,
            this.getSize().height
         );
         dbGraphics = dbImage.getGraphics();
      }
      //Hintergrund löschen
      dbGraphics.setColor(getBackground());
      dbGraphics.fillRect(
         0,
         0,
         this.getSize().width,
         this.getSize().height
       );
      //Vordergrund zeichnen
      dbGraphics.setColor(getForeground());
      paint(dbGraphics);
      //Offscreen anzeigen
      g.drawImage(dbImage,0,0,this);
   }
    
    }

Mit freundlichen Grüßen

RauchenderDachs
 
Mach mal aus
Code:
dasCreep[n]= new Creep(40,25,this);

Code:
dasCreep[n] = new Creep(40, 25 - 20 * n, this);

Dann fällt dir bestimmt was auf. ;)
 
Zurück
Oben