2016-01-11 2 views
0

Я хотел бы поднять переменную монету во время любых перекрытий. Проблема в том, что монета является изображением и не может увеличить ее только один раз, сделав меня монетой, по крайней мере, 10/11 раз. Моя цель - удалить снимок, а затем и прямоугольник, как в приведенном ниже коде. Проблема в том, что если я удалю Rectangle, то я даже не распознаю перекрытия монет. Как я могу исправить?Увеличьте переменную в render() и удалите прямоугольник и изображение

render() 
.... 
    if(!monetaRectangles.isEmpty() && !monetaImages.isEmpty()) { 
         for (int i = 0; i < monetaRectangles.size(); i++) { 
          monetaRectangles.get(i).setX(monetaImages.get(i).getX()); 
          monetaRectangles.get(i).setY(monetaImages.get(i).getY()); 

          if (surferRectangle.overlaps(monetaRectangles.get(i))) { 
           contatoreMonete++; 
           monetaRectangles.remove(i); 
           monetaImages.get(i).remove(); 
           moneteLabel.setText("Monete: " + contatoreMonete); 
          } 
         } 
        } 
... 
end render() 

длительность dell'overlaps объект один второй, поэтому я увеличил переменный каждый рендеринг правильно, вы могли бы решить? Я не знаю логики

+0

магазин удален прямоугольник в другой список? – Sneh

+0

нет я не хранил прямоугольник в другом списке –

+0

Я предлагаю вам эту технику. – Sneh

ответ

0

Вы выполняете модификацию коллекции, итерации по ней. (коллекции Используйте libGDX так, что новый итератор не создается каждый раз)

for (int i = 0; i < monetaRectangles.size(); i++) { // 
    monetaRectangles.get(i).setX(monetaImages.get(i).getX());// if you removed 'i' in the previous loop this will effectively get i+2 of the original 
    monetaRectangles.get(i).setY(monetaImages.get(i).getY()); 

    if (surferRectangle.overlaps(monetaRectangles.get(i))) { 
     contatoreMonete++; 
     monetaRectangles.remove(i); //The semantics of 'i' is now changed. 
     monetaImages.get(i).remove();//also here 
     moneteLabel.setText("Monete: " + contatoreMonete); 
    } 
} 

Используйте итератор по коллекции объектов, сохраняющей связь между вашим изображением и прямоугольника. то вы можете сделать Iterator.remove() и продолжить итерацию правильно.

Некоторые общие рекомендации - кажется, вы пытаетесь сохранить «положение» вашей физики/gameworld синхронно с «позицией» вашего изображения или наоборот.

Я бы предложил перестроить ваши игровые объекты как композиции «данных рендеринга», «данные физики/мира» и «игровые логические данные/процессы». Затем централизуйте общие атрибуты в компонентах, доступных для обоих. Позиция является общим кандидатом для такого рода данных. Теперь, когда вы обновляете позицию, все, что использует эту позицию, также обновляется.

Ashley проект LibGDX, который помогает с этим, и это указывает на эту статью, чтобы объяснить: entity systems