2016-07-03 6 views
-1
int moveDown = 10; 
int moveRight = 10; 

    for (int i = 0; i < 5; i++) { 
     for (int j = 0; j < 10; j++) { 
      xEnemies[j].drawEnemy(window); 
      xEnemies[j].setPos(sf::Vector2f(moveRight, moveDown)); 
      moveRight += 50; 
     } 
     moveDown += 50; 
    } 

Привет всем, здесь я пытаюсь нарисовать врагов на экране с помощью петли и вектора. Я хочу, чтобы игрок смог уничтожить врагов, однако всякий раз, когда враг уничтожается, враг снова получает перерисовывание, потому что он находится под циклом while (isOpen()). Поэтому мой вопрос: есть ли способ рисовать объекты за пределами этого цикла?C++ SFML Draw объекты за пределами while (window.isOpen()) loop

+1

Как насчет того, чтобы не рисовать уничтоженные? – immibis

ответ

2

Остановить мышление операции рисования как одноразового действия. Это не работает, как бумага, где вы рисуете один раз, а затем она там, пока вы ее не удалите. С компьютером графики стираются несколько раз в секунду, и это ваша работа до redraw их каждый раз, когда это происходит. Вот как работают графические рамки и современные графические карты.

Весь ваш чертеж нуждается в, чтобы быть в вашем игровом цикле.

Что вам нужно, это булевский флаг в вашем вражеском классе, который установлен, если противник уничтожен. Если вы этого не хотите, то поставьте if в свой цикл и не нарисуйте те, которые были уничтожены. В качестве альтернативы вы можете удалить уничтоженных врагов из своего xEnemies вектора.