2012-02-14 3 views
0

Im пытается глупо способов построения игры.Управление множеством объектов для рисования.

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

Сценарий: У меня есть карта, содержащая 50 * 50 квадратов, украшенных opengl в java. Чтобы рисовать все это, каждый раз, каждый кадр, я использую for-loops, что означает 2500 отдельных рисунков каждого кадра. я использовать что-то вроде этого:

for(Y=0;Y<50;Y++){ 
for(X=0;X<50;X++){ 
box[Y][X].draw(); 
} 
} 

Есть ли лучший способ сделать это? Это просто не так! Есть ли способ сохранить вывод ничьей, матрицей (или тем, что вы называете :-)) после ее рисования в первый раз ?, чтобы я мог загрузить его в это состояние?

+0

Возможно ли перерисовать только квадраты, которые изменились? Возможно, просто сохраните (x, y) пары и пройдите только через этот список, чтобы вызвать draw() –

ответ

2

Существует несколько различных стратегий. Честно говоря, 2500 объектов для проверки «много», но на самом деле это не так много, и это то, что можно оптимизировать до n-й степени. Часто узкое место в розыгрыше вызывает самих себя, а не итерирование объектов.

Итак, перебирайте объекты и выполняйте проверку усечения. То есть, проверьте, полностью ли объекты находятся вне поля зрения игрока. Не рисуйте, если они есть. Если вы только рисуете 2D, это часто бывает просто. Если это 3D, вам понадобится еще более сложная математика, но тем не менее простая линейная алгебра.

Следующий общий метод: шаг за шагом - это какой-то график сцены или иначе пространственная структура. Это становится намного более сложным очень быстро, но в любой момент он хорошо работает с любым 2D/3D-содержимым под любым углом. (Google - ваш друг на данный момент, вопрос очень открытый.)

В качестве альтернативы, если у вас есть простой 2D сверху вниз квадрат, вы можете создать простой 2D-массив и нарисовать части карты, которые являются релевантными на основе координат камеры. (Сделайте линейное преобразование координат камеры X и Y, которое масштабируется вниз по индексам массива, а затем нарисует прямоугольник координат массива.)

Я бы не рекомендовал дифференциальный подход, если для этого не существует особых причин. Как правило, трудно управлять и бесполезно, когда вы прыгаете по местам.

Небо - это предел, не зная каких-либо подробностей, но старайтесь держать его простым. Сделать игры достаточно сложно.

+0

Так как я не ответил 1 год назад, когда я спросил, я просто хотел сказать спасибо за то, что настроил мой разум правильно! –

+0

Очень любезно, и вы очень желанны. Как получился ваш проект или как он все еще продолжается? – Kaganar

+0

О, я просто попытался сделать некоторые эксперименты. я все еще делаю это время от времени, но сейчас я сосредоточен на других вещах =) еще раз спасибо –

Смежные вопросы