Creating multiple of same objects - Only displays one out of 5

edited December 2017 in Questions about Code

Hello guys

I have a problem regarding drawing multiple of the same objects. They end on top of each other, and their "Object values" even get added together e.g. if a zombie has "2" movement value and there is added 2 into the current level. Then when zombies are moved, they move "4" each. This does not happen if two different objects are moved e.g. Zombie and Dragon. I have created the following code based on my project - for a simpler overview. However, the behavior is the same.

It should be mentioned the objects of the same type have the same "HashCode". I have also made comments and println to help figure out the problem. Each of the 5 objects have different position (When set). However, they are rendered on top of each other and merged (Movement).

EnemyDatabase enemyDatabase;
ArrayList<Enemy> enemiesInlevel = new ArrayList<Enemy>();

void setup()
{
  size(600, 600);
  enemyDatabase = new EnemyDatabase();

  enemyDatabase.enemies.add(new Enemy("Zombie", 3));

  //If dragon is added - Then it can draw both - But only once
  //enemyDatabase.enemies.add(new Enemy("Dragon", 10));

  //Add 10 zombies to the level
  for(int i=0; i< 5;i++)
  {
    //5 Zombies are created and succesfully added to the database
    enemiesInlevel.add(enemyDatabase.enemies.get((int)random(0, enemyDatabase.enemies.size())));;    
  }

  for(int i=0; i<enemiesInlevel.size();i++)
  {
    //Sets the position of all 5 - Gives random position
    Enemy enemy = enemiesInlevel.get(i);
    enemy.SetPosition();
  }
}

void draw()
{
   background(255, 200, 0);

   //Draw 5 enemies - Of index 0 (Zombie)
   for(int i=0; i<enemiesInlevel.size();i++)
   {
     Enemy tempEnemy = enemiesInlevel.get(i);
     tempEnemy.draw();
     //It runs 5 times - print returns 5 total objects in enemiesInlevel
   }
}

class EnemyDatabase
{
  ArrayList<Enemy> enemies = new ArrayList<Enemy>();
}

class Enemy
{
  String enemyName;
  int enemyHealth;
  PVector enemyPosition;

  public Enemy(String name, int hp)
  {
    enemyName = name;
    enemyHealth = hp;
  }

  public void SetPosition()
  {
    enemyPosition = new PVector(random(0, width), random(0, height));
    //Each of the objects has a random position
    println(enemyPosition);
  }

  public void draw()
  {
    rect(enemyPosition.x, enemyPosition.y, 25, 25);
  }
}

Hope you guys can figure it out. I certainly have a hard time - I usually don't work in processing Thank you

Tagged:

Answers

Sign In or Register to comment.