Я прочитал эту статью о создании гоночной игры старой школы, такой как Outrun или Lotus.
Код там основан на элементе холста HTML и JavaScript. Для достижения 3D-эффекта автор сегментирует гоночную трассу и рисует простые 2D-полигоны для каждого сегмента, которые проецируются в «3D-пространство». Код для рисования этих полигонов таков:
polygon: function(ctx, x1, y1, x2, y2, x3, y3, x4, y4, color) {
ctx.fillStyle = color;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.lineTo(x3, y3);
ctx.lineTo(x4, y4);
ctx.closePath();
ctx.fill();
}
Эти полигоны рисуются в каждом кадре. Мне было интересно, как та же концепция может быть воплощена в SpriteKit. Поскольку практически единственный вариант рисования пользовательских полигональных объектов в SpriteKit — это SKShapeNode, я подумал об их использовании. Однако я чувствую, что с этим решением могут быть серьезные проблемы:
- Я слышал, что SKShapeNodes имеют очень плохую общую производительность, проблемы с утечкой памяти и так далее.
- В соответствии с приведенной выше концепцией нужно было бы создать сотни или тысячи SKShapeNodes в каждом кадре для компоновки и рендеринга дорожки на экране, что, вероятно, полностью убьет частоту кадров.
Я начал задаваться вопросом, возможно ли вообще создавать такие игры в SpriteKit. Есть ли у вас какие-либо советы о том, как это сделать? Или мне нужно перейти на SceneKit и использовать настоящие полигоны для достижения желаемого эффекта? Любая помощь или предложения высоко ценятся. Заранее спасибо.