Come generare più "mostri" da una singola classe [chiuso]

1

Come generare più "mostri" da una singola classe? Posso conservarlo in un array, ok, ma più tardi, come posso dipingerlo? Perché se lo faccio:

enemy = new Enemy();
enemy2 = new Enemy();

Creo due istanze dell'oggetto, ma dopo come posso dipingerlo?

Io uso:

g2d.drawImage(Enemy.getImage(), Enemy.getX(), Enemy.getY(), this);

Ma ovviamente usa la classe, non la variabile.
Le immagini non saranno sovrapposte perché le coordinate sono casuali.

La struttura del nemico è:

public class Enemy {
static Random randomGenerator = new Random();
private int x;
private int y;
private Image image;
private int dx;
private int dy;
private int i;
private int strength=10;
private static int hp=100;
public String EnemyP = "/image/cazzillo_base_definitivo_000.png";

public Enemy() {    //Set skin and enemy position

    ImageIcon ii = new ImageIcon(this.getClass().getResource(EnemyP));
    image = ii.getImage();
    x = randomGenerator.nextInt(1024);
    y = randomGenerator.nextInt(700);
}

public int getX() { //Get function
    return x;
}

public int getY() {
    return y;
}

public Image getImage() {
    return image;
}

public void move() {    //Movement with delay
    if(i==6){
    x += dx;
    y += dy;
    }
}
public void follow () { //Function that follow the main character
    if (Cazzillo.getX()>x)  //Cazzillo it's the character class
        dx=1;
    else if (Cazzillo.getX()<x)
        dx=-1;
    else
        dx=0;
    if (Cazzillo.getY()>y)
        dy=1;
    else if (Cazzillo.getY()<y)
        dy=-1;
    else
        dy=0;
    if(i<6)
        i++;
    else
        i=0;
}

public void attack () { //Attack function not implemented yet
}
public void attacked (){    //Function that is activated when enemy's attacked
    hp -=Cazzillo.getS();
    if (hp<=0)  
        death();
}
public void death (){
        x=randomGenerator.nextInt(1024);
        y=randomGenerator.nextInt(700);
        hp=100;
}
}
    
posta Marco Franceschini 24.10.2014 - 09:25
fonte

1 risposta

5

But obviously it use the class, not the variable.

Beh, questo è ovviamente sbagliato. Devi usare l'istanza:

g2d.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), this);
g2d.drawImage(enemy2.getImage(), enemy2.getX(), enemy2.getY(), this);

Ovviamente ciò significa che quei metodi devono essere metodi di istanza e i loro dati memorizzati in campi non statici. Ecco di cosa si tratta OOP: avere oggetti separati che contengono i propri dati e hanno metodi che operano sui dati dell'oggetto. Le classi sono solo modelli per più istanze di oggetti. I metodi Class / static (e soprattutto i campi) sono un'aberrazione che dovrebbe essere evitata.

    
risposta data 24.10.2014 - 09:50
fonte

Leggi altre domande sui tag