2013-08-08 6 views
0

Я знаю, что мой заголовок немного странно-стильный. Моя проблема заключается в том, что я пытаюсь закодировать небольшую игру на C++ с графикой Win32, и я хочу, чтобы все мои части были нарисованы сверху вниз, чтобы они шли должным образом друг к другу. (EG, если я стоял перед деревом, он сначала рисует дерево, а затем игрок, так что я впереди)Повышение производительности 2D-графики

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

for(y = 0; y < playerYValue; y++){ 
    //Check every enemy/object to see if its yValue matches the looping y 
    object.drawImage(); 
} 

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

Я ищу способ нарисовать все мои объекты в порядке и оценил бы любые помогите, все стоит попробовать. Это одна из областей, о которой я просто не могу придумать изобретательский способ решения проблемы.

Пожалуйста, спросите, если вы нуждаетесь во мне, чтобы дать более подробную информацию :)

EDIT: комментарий в коде является заполнителем для вектора итераций каждый раз, чтобы проверить, если yValue объекта равен у :) Думал, что я 'd ясно, что немного :)

+0

Какое содержимое «object.drawimage()»? – Kevin

+0

drawImage() в этом случае является просто заполнителем для функции рисования изображения. Это просто базовая ничья Win32, ничего особенного. –

ответ

2

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

И старайтесь не делать плеер особенным. Игрок должен быть «объектом», а затем вы будете сортировать один раз назад, а затем отступать назад.

+0

Хорошо, все мои «объекты» являются членами Entity по таким причинам, поэтому я мог бы создать вектор, который охватывает все. как бы я начал сортировать все мои объекты с помощью переменной? :) Я знаю алгоритм sort(), но я бы подумал, что это будет сортировать только по имени? (Спасибо за помощь, это, конечно, пища для размышлений!) –

+0

Кроме того, если игрок включен в этот переменный вектор, как бы я сделал все конкретные вещи для него? Или я должен попытаться удостовериться, что все специфики обрабатываются внутри класса :) –

+0

@BradleyHodgkins. Последнее предложение - идеальный случай, если вам нужно, чтобы вы сохраняли «Player * myPlayer» до объекта игрока, прежде чем добавлять его в список «Entity». Затем используйте этот указатель для работы по его особенностям, таким как ввод проигрывателя и т. Д. Вы должны попытаться использовать перегрузку/наследование, чтобы свести к минимуму необходимость внешнего контроля, насколько это возможно, хотя –

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