Snake Game следующие сегменты (без сетки) - PullRequest
2 голосов
/ 05 декабря 2010

Я пытаюсь создать игру «Змея», в которой движение змеи основано не на сетке, а на свободной форме, и у меня возникают проблемы с выяснением того, как заставить конечные сегменты следовать за головой.Самое простое решение состоит в том, чтобы выполнить цикл от хвоста до головы и установить позицию тока в позицию следующего сегмента, то есть: segment[i].position = segment[i - 1].position.Это прекрасно работает, но я получаю все сегменты, сгруппированные вместе на расстоянии всего одного пикселя (или около того).Это не очень привлекательно.

Чтобы победить, я создал массив для последних 15 позиций и выдвинул последнюю позицию до конца.Затем в каждом кадре я извлекаю первый элемент из массива и использую его, давая мне snapshot того, где был сегмент 15 кадров назад.Это работает отлично, но производительность действительно снижается, постоянно вызывая new() и перетасовывая массив.Сборщик мусора Flash дает мне ад.

Кто-нибудь может подумать о других решениях?

Я работаю над Flash, но не думаю, что решение действительно основано на каком-либо языке.

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 декабря 2010

A deque , как правило, реализует эти вещи, но если он недоступен, тогда кольцевой буфер , реализованный в массиве, может служить заменой, если очередьразмер имеет верхнюю границу.

0 голосов
/ 05 декабря 2010

Самое простое решение - выполнить цикл от хвоста до головы и установить позицию тока в позицию следующего сегмента, то есть: сегмент [i] .position = сегмент [i - 1] .position. Это прекрасно работает, но я получаю все сегменты, сгруппированные вместе на расстоянии всего одного пикселя (или около того). Это не очень привлекательно.

Это не должно вызывать группировку, которую вы описываете. Можем ли мы увидеть код? Возможно, вы делаете что-то, что приводит к тому, что сегменты делят объекты позиции.

Тем не менее, плавный подход (при условии, что он не мешает вашему искусству и что вы можете перемещать по одному сегменту за раз) - это переместить голову в новое положение, а затем переместить хвост туда, где была голова, вставив ее в список в соответствующей позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...