Рисование непрерывных линий в Xcode/Unity

Я делаю приложение, которое рисует непрерывные линии, как змея, используя Unity и SKSpriteKit (Obj-C) в Xcode (я делаю 2 версии одного и того же приложения в обоих):

http://i.stack.imgur.com/qA1zk.png

http://i.stack.imgur.com/484kj.png

http://i.stack.imgur.com/QTEkC.png (Извинения за посты с изображениями. Я не могу опубликовать изображение/более 2 ссылок)

Если вы когда-нибудь слышали об игре под названием Curve Fever, то то, что я здесь делаю, очень похоже на нее. Я управляю направлением конца линии с помощью клавиш со стрелками, в то время как конец линии автоматически перемещается вперед в каждом кадре, создавая изображение, подобное приведенному выше.

Однако из 3 скриншотов выше совершенно очевидно, что моя программа не очень эффективна - каждый кадр я добавляю спрайт круга в SKScene в том месте, где мой движущийся спрайт, из-за чего через некоторое время появляется на экране более 1000 узлов, а потребление энергии/памяти/процессора очень велико… Не идеально.

Так что теперь я ищу лучшие способы рисования линии на экране без рисования тысяч узлов.

Некоторое время назад мой друг рассказал мне о том, как он сделал похожее приложение в GameMaker (я не знаю, как им пользоваться). Когда я спросил его, как он визуализировал линию, он сказал, что создал что-то, называемое «поверхностью», и когда что-то движется по этой поверхности, старое положение спрайта все еще остается там — что создает линии, если круг перемещается по поверхности. поверхность.

Он довольно расплывчато говорил об этом, и позже я попытался провести некоторые исследования, но безуспешно. Я не смог найти ничего подходящего о непрерывных линиях, поверхностях и GameMaker, Xcode или Unity.

Если бы кто-то мог предложить решение, о котором говорил мой друг, для Xcode/Unity - желательно для обоих (или если бы кто-нибудь мог сказать мне, о чем он говорил для GameMaker), то я был бы признателен, так как это оптимизировало бы мой игра и уменьшить серьезные лаги, которые я получаю примерно через 30 секунд.

Кроме того, я был бы признателен, если бы кто-нибудь мог предложить альтернативные решения и для этого.


person Community    schedule 31.05.2015    source источник


Ответы (1)


Я использую GameMaker, но ничего не знаю о Xcode или Unity. Я не могу помочь вам напрямую, но я могу объяснить поверхности GameMaker.

Поверхности в GM — это объекты, на которых вы можете рисовать вместо непосредственного рисования на экране. Позже вы можете нарисовать поверхность на экране. Основным преимуществом этого является то, что вы можете сохранить поверхность и, например, нарисовать ее снова в другом тике, в то время как экран перерисовывается в каждом тике, или что вы можете изменить его с течением времени.

Поверхности — это просто растровые изображения, на которых вы рисуете. Это означает, что было бы нетрудно сделать то же самое в любой другой среде. Большинство других библиотек/API называют его холстом.

В вашем примере вы должны нарисовать один круг на растровое изображение в каждом тике, а затем нарисовать все растровое изображение на экране.

Связанная с этим тема — разрушаемый ландшафт, поскольку она обсуждается здесь: https://gamedev.stackexchange.com/questions/6721/implementing-a-2d-destructible-landscape-like-worms

person Sinthorion    schedule 06.06.2015