Поддельный 3D-гонщик в SpriteKit

Я прочитал эту статью о создании гоночной игры старой школы, такой как 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 и использовать настоящие полигоны для достижения желаемого эффекта? Любая помощь или предложения высоко ценятся. Заранее спасибо.


person snorge    schedule 14.08.2015    source источник
comment
Вы должны быть более четкими в том, что ваш вопрос. Связанная статья слишком длинная, чтобы ее можно было прочитать и понять, как к ней относится ваш вопрос.   -  person sangony    schedule 14.08.2015


Ответы (1)


Если вы задаетесь вопросом, что проще сделать в 3D-игре, то вы получите простой ответ: конечно, проще использовать 3D-движок, чем имитировать 3D в 2D-движке.

А также, если у вас возникли проблемы с кодом и вы пытаетесь подделать 3D с помощью SpriteKit, вы получите меньше помощи, чем при использовании SceneKit.

надеюсь, это поможет

person Thomas Pereira    schedule 14.08.2015