Управление множеством «объектов» для рисования. - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь придумать способы построения игры.

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

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

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

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

1 Ответ

2 голосов
/ 15 февраля 2012

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...