2015-01-21 6 views
0

У меня есть программа обработки с фигурами, которые перемещаются по экрану и теряют здоровье, когда они сталкиваются. Как битва. Но обнаружение столкновения работает только на одном наборе сталкивающихся блоков за раз. Если битва происходит в точке на экране, других сражений не произойдет, пока она не закончится.Обнаружение столкновений при обработке

for(int i = 0; i < enemies.size(); i++){ 
    for(int j = 0; j < friendlies.size(); j++){ 
     if(checkCollision(friendlies.get(j),enemies.get(i))){ 
     if(ttime == 0){ 
      ttime = millis(); 
     } 
     if((millis()-ttime)>1000){ 
      if(enemies.get(i).getXSpeed()==0 && enemies.get(i).getYSpeed()==0){ 
      enemies.get(i).attackfriendly(friendlies.get(j));} 
      if(friendlies.get(j).getXSpeed()==0 && friendlies.get(j).getYSpeed()==0){ 
      friendlies.get(j).attackenemy(enemies.get(i)); 
      } 
      ttime=0; 
     } 
     } 

    } 
    } 




boolean checkCollision(friendlyUnit f, enemyUnit e){ 
    if(Math.abs(f.getX()-e.getX()) < 21 && Math.abs(f.getY()-e.getY()) < 21){ 
    return true; 
    } 
    else{ 
    return false; 
    } 
} 


    void attackenemy(enemyUnit e){ 
    int damage=0; 
    ArrayList<friendlyUnit>friendnear = new ArrayList<friendlyUnit>(); 
    for (int i=0; i< friendlies.size(); i++){ 
     if ((checkCollision(friendlies.get(i),e))&& friendlies.get(i).isAlive()){ 
     friendnear.add(friendlies.get(i)); 
     } 
    } 
    for (int j=0; j<friendnear.size();j++){ 
     damage=damage+friendnear.get(j).getAttack(); 
    } 
    e.changeHealth(damage); 
    } 

Враги и товарищеские матчи - это массивы врагов и дружественные формы. Время ttime - таймер. getX и getY возвращают X и Y кооринаты.

+2

Можете ли вы разместить свой код здесь как [MCVE] (http://stackoverflow.com/help/mcve)? –

+0

Получил неправильную ссылку, мой плохой. – user3093270

+1

Большинство людей не нажимают на такие ссылки. Вам будет гораздо лучше удалять этот код здесь как [MCVE] (http://stackoverflow.com/help/mcve). –

ответ

0

Похоже, что время является глобальным и получает контроль/сброс для всех дружественных/вражеских взаимодействий, а не каждое взаимодействие, имеющее собственное время ttime. Проходит ли только одна атака каждую секунду? Вам нужно иметь массив ttimes, чтобы таймер был связан только с одним взаимодействием, что означает массив/ArrayList размера (enemy.size() * friendlies.size()), по одному для каждого взаимодействия.