Несколько объектов Breakout в одном Picture Box

Я создаю программу, которая имитирует игру Breakout Game с использованием C #.

Я изучаю различные методы создания кубиков, весла и мяча для игры, но не могу понять, как добавить их все в одно поле с изображением в Visual Studio.

Основная проблема, с которой я столкнулся, заключается в том, что для того, чтобы переместить мяч, например, я должен очистить «холст», используя следующий раздел кода: paper.Clear(Color.White); Это в основном очищает поле изображения до белого цвета, чтобы новый координата (например, мяча) должна быть в поле изображения, и здесь начинается моя проблема.

Каждый из компонентов игры Breakout (на которых я практиковался) использует код paper.Clear(Color.White);. Это означает, что если, например, я хочу одновременно двигать ракетку, отображать кирпичи и отбивать мяч, программа просто решает выполнять одну функцию за раз. Если я удалю paper.Clear(Color.White); из одного из своих активов, программа просто не будет работать так, как я хочу.

Есть ли способ, чтобы все эти компоненты работали одновременно в игре, не пропуская ни один из них полностью?


person Community    schedule 13.11.2014    source источник


Ответы (1)


В самом простом случае вам нужно изменить свой подход, чтобы «макет» или «рисование» управлялись централизованно, предположительно по таймеру или аналогичному, и выполняли одну операцию «очистить», а затем перерисовывали все ваши компоненты. Другими словами, не заставляйте каждый компонент очищать холст, они должны просто заниматься своим собственным рендерингом.

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

person user469104    schedule 13.11.2014
comment
Спасибо за ответ! Имеет больше смысла делать одну очистку в таймере, а не для каждого компонента. Я попробую и посмотрю, как я справлюсь. - person ; 13.11.2014