2017-07-07 1 views
0

Je fais un projet de collège et j'ai des problèmes avec ma méthode de mise à jour EntiyManager. Ce système de mise à jour rend mes balles plus rapides en fonction de la taille de mon tableau d'entités. Si la taille de ce tableau est supérieure à 1, la balle se déplacera plus rapidement si la balle ne bouge pas normalement. Je souhaite que toutes mes balles se déplacent normalement.Méthode de mise à jour se comportant différemment en fonction de la taille du tableau d'entité.

Note: b.getVel() et vel sont toujours 2.

méthodes de EntityManager:

public void update() 
{ 
    if(!handler.getPaused()) 
    { 
     for(int i = 0; i < creatures.size(); i++) 
     { 
      //entities[i]  at 
      Creatures c = creatures.get(i); 
      c.update(); 

      if(!bullets.isEmpty()) 
      { 
       for (int j = 0; j < bullets.size(); j++) 
       { 
        Bullet b = bullets.get(j); 
        //Hit detection; 
        if(c.getCollisionBounds(b.getVel(), 0).intersects(b.getCollisionBounds(0, 0))) 
        { 
         c.HP -= 5; 
         removeBullet(b); 
        } 
        System.out.println(b.getVel()); 
        b.update(); 
       } 
      } 
      else System.out.println("empty"); 
     } 

    } 

} 



public void draw(Graphics g) 
{ 

    for(Entity se : staticEntities) 
    { 
     se.draw(g); 
    } 

    for(Bullet b : bullets) 
    { 
     b.draw(g); 
    } 

    for(Creatures c : creatures) 
    { 
     c.draw(g); 
    } 
} 

méthodes Bullet:

@Override 
public void update() 
{ 
    if(vel > 0) 
    { 
     txRight = (int) (x + vel + bounds.x + bounds.width)/Tile.TILESIZE; 
    } 
    else 
    { 
     txLeft = (int) (x + vel + bounds.x)/Tile.TILESIZE; 
    } 

    if(collisionWithTile(txRight, (int) (y + bounds.y)/Tile.TILESIZE) || 
     collisionWithTile(txRight, (int) (y + bounds.y + bounds.height)/Tile.TILESIZE) || 
     collisionWithTile(txLeft, (int) (y + bounds.y)/Tile.TILESIZE) || 
     collisionWithTile(txLeft, (int) (y + bounds.y + bounds.height)/Tile.TILESIZE)) 
    { 
     handler.getLevel().getEntityManager().removeBullet(this); 
    } 

    x += vel;   
} 

@Override 
public void draw(Graphics g) 
{ 
    g.setColor(Color.yellow); 
    g.fillRect((int) x, (int) y, width, height);  
} 

Répondre

0

Je sais maintenant pourquoi ce qui se passe. Il met à jour deux fois la balle.