Я хочу делать изометрические игры для iPhone на основе плиток с cocos2D.
Спрайты должны быть нарисованы поверх других спрайтов, которые "позади" этого. Я ищу лучший способ сделать это.
Я бы хотел избежать алгоритма художника, потому что он включает в себя сортировку всех спрайтов в каждом кадре, что дорого.
Алгоритм Z-буфера поддерживается графическим процессором и cocos2D, так что это то, что я хотел бы использовать, но есть проблема. Некоторые спрайты, например здания, занимают несколько тайлов. Присвоить значение Z таким спрайтам сложно.
Вот варианты, о которых я подумал:
- Сравнение двух зданий и определение того, какое из них "впереди",
легко. Таким образом, здания могут быть отсортированы, а затем присвоить значение Z на основе
порядок сортировки. Это ничем не отличается от картины художника.
алгоритм. Буфер OpenGl ES Z не понадобится.
- Назначьте значение Z каждому зданию, основываясь исключительно на его расположении на
карта (без знания того, где находятся другие здания). я
найти это трудно. Я думаю, что это возможно, но я не был
в состоянии придумать формулу еще.
- Используйте несколько спрайтов для изображений, которые занимают более одного тайла, поэтому
все спрайты будут одинакового размера. Z заказов может быть
легко назначается в зависимости от того, какую плитку занимает спрайт.
Проблема с этим решением состоит в том, что это делает игровую логику намного более
сложно. Все операции на одном здании должны быть
повторяется для каждого спрайта, из которого состоит здание. Я бы хотел
рассматривать каждый объект как единый объект.
- Изменить код cocos2D, чтобы спрайты имели несколько значений Z
в разных точках. Если спрайт может иметь несколько значений Z на основе
на какую плитку падает конкретная часть спрайта, затем вычисляется
значение Z для этого раздела легко. Мне не нужно будет сравнивать
спрайт на любые другие спрайты. Я считаю, что это возможно с помощью
несколько квадов для каждого спрайта. Проблема в том, что это
немного сложнее для меня, так как я новичок в OpenGL ES и cocos2D. я
не совсем понимаю, как все внутренние структуры данных
Работа. Хотя это кажется самым элегантным решением, если формула
не может быть найден.
Я буду голосовать за любые предложения или ссылки на полезные ресурсы.