Большинство достойных движков и фреймворков предоставляют необходимую вам функциональность и никогда не мешают вам.
Они? Это скорее зависит от того, что именно вы делаете, графически говоря.
Для многих видов игр существуют стандартные ответы на графические вопросы. Например, среднестатистическая 2D-игра прекрасно справляется с 2D-мастерством, например, XNA / MonoGame. Это просто спрайты, которые могут приходить партиями по местности, могут вращаться и так далее.
Но что, если ваша игра раньше была обычной 2D игрой, то вы читали о какой-то классной технике, такой как использование карты высот для создания самозванца, который имеет вид глубины относительно экрана. И ты хочешь сделать это.
Теперь вы используете нормальное отображение и, возможно, отображение параллакса. Все в одном и том же контексте «рендеринга спрайтов», но требующего больше, чем просто чистых 2D движков. В частности, он требует многоуровневого «спрайтового блинтинга», чего не могут сделать многие 2D движки.
Что вы делаете, если ваш двигатель не может адаптироваться к вам? Таким образом, это означает, что вы должны сделать несколько проходов, один для цвета и один для освещения через карту нормалей. Но это не работает, потому что вам нужно поле высоты карты нормалей, чтобы использовать отображение параллакса для поиска цвета. Ну что теперь? Вам нужна альфа, чтобы сделать прозрачность, поэтому вы не можете украсть альфу. И двигатель просто не поддерживает мультитекстуры.
Таким образом, вы должны выбрать один из следующих:
- Откажись от идеи. Это означает, что ваша игра функционально ограничена вашим движком.
- Взломать двигатель, чтобы иметь мультитекстуру. Предполагая, что у вас есть доступ к исходному коду, вы теперь берете его на себя, чтобы совать чужой код. Это также означает, что вам нужно поддерживать его, а не разбивать его, когда вы спотыкаетесь.
- Делайте все возможное, в рамках ограничений двигателя. Таким образом, вы можете получить параллакс на картах нормалей, но не на цветах. Это может быть не совсем то, что вы хотели, но это лучше, чем ничего.
В качестве примера возьмем Geometry Wars. Большинство 2D-движков сосут подобные визуальные эффекты, так как большинство из них построены вокруг рисованных спрайтов, а не линий. Это игра, которая требует очень специализированного вида рендера.
В конце концов, вы должны взять на себя ответственность за элементы вашей игры, которые важны для потребностей вашей игры. Если визуальный вид вашей игры в первую очередь определяется художественным стилем изображений и моделей, которые вы используете, а не конкретными эффектами, тогда использование предварительно упакованного решения - это хорошо. Но если визуальный стиль вашей игры в значительной степени определяется пользовательским кодом рендеринга, вполне вероятно, что стандартный движок может стать серьезным ограничением, если вы решите делать что-то нестандартное.
Кроме того, есть очень практическая проблема: не все игровые движки одинаково переносимы.
С недавним ростом мобильных платформ рынок игр распространяется на многочисленные ОС и устройства с пользовательским интерфейсом. Не все двигатели работают на всех устройствах. И если ваш движок не работает на платформе, вы наверняка не будете тратить время на то, чтобы заставить его работать на одной платформе . В конце концов, именно поэтому вы использовали двигатель в первую очередь, верно?
Если для вас важно, чтобы ваша игра функционировала на определенной платформе, вам снова нужно взять на себя ответственность за это. И самый простой способ добиться успеха - это сделать это самостоятельно. Для создания механизма, который может работать на нескольких платформах, возможно, с использованием более простых платформо-зависимых сред, где необходимо обрабатывать некоторые детали низкого уровня. Таким образом, если он сломается, это ваш код; ты лучший человек, который сможет это исправить.