Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Повторение движений объектами за другим объектом (http://www.flasher.ru/forum/showthread.php?t=131247)

Sapfir 15.10.2009 22:32

Повторение движений объектами за другим объектом
 
Вопрос имеет к ActionScript 3 косвенное отношение, но все же.

Делаю игру типа классической змейки. Змейка может двигаться в любом направлении на плоскости, при этом тело змейки повторяет в точности путь, пройденный головой (первым звеном). Допустим, что змеек штук 5.

Рационально ли будет тупо запоминать координаты первого звена в каждый момент и времени и потом вести остальные звенья по этим координатам?. Ведь это получится 5 достаточно больших массивов, растущих ежесекундно (а на самом деле вообще каждые 30 милисекунд). Выдержит ли проигрыватель Flash, если код написан на ActionScript 3?

Может есть хороший алгоритм? Need optimization :)

VVall 15.10.2009 22:47

В классической змейке массив координат, растущий при увеличении длины змейки. Зачем вам нужен рост массива каждые 30 мсек? Это ведь 33 добавленных звена в секунду, а за минуту под 2000 звеньев.

Sapfir 15.10.2009 22:56

В игре каждые 30 мсек. срабатывает функция, перемещающая змейку (первое звено) в нужно направлении, т.е. каждые 30 милисекунд меняется координата. Так змейка движется плавно, без рывков.

Т.е. у меня не совсем уж классическая змейка по квадратикам. =)

VVall 15.10.2009 23:04

Изменение координат и рост массива - это разные вещи. Массив должен увеличиваться только при добавлении звеньев. В случае плавного движения размер массива будет количество звеньев * задержка в кадрах между первым и вторым звеньями (расстояние между звеньями будет зависеть от скорости первого звена и от этой задержки).

alecsisk 15.10.2009 23:05

можно запоминать координаты каждого звена змейки в массив. Получиться один массив из обьектов Point(x,y). Незнаю как с производительностью, но работать будет. Каждые 30мс мы пробегаемся по массиву, 0 элемент (1 звено) становиться новым Point, т.к. мы сдвинулись. 1 становиться 2 и так далее....последний удаляется. Вместе с массивом добавим переменную maxLenght - сколько звеньев в змейке может быть максимальным. Соотвественно при взятии бонуса maxLenght растёт.

wvxvw 15.10.2009 23:07

Почему 5 и почему массивов? Я с ходу один вектор насчитал...
Код AS3:

var path:Vector.<Matrix> = new Vector.<Matrix>(maxLength);
// если элементы поворачиваются по дороге
var path:Vector.<Point> = new Vector.<Point>(maxLength);
// если элементы только сдвигаются

Можно, конечно, сделать и не фиксированой длины, а наращивать по мере прибавления элементов.

Sapfir 15.10.2009 23:46

VVall

"Массив должен увеличиваться только при добавлении звеньев." Да, я это понимаю и это совершенно верная мысль. Так не будет он все равно достаточно большим?

wvxvw

5, это для каждой из змеек, их несколько - 5 штук для примера. Вектор. Хм. Ну схема та же фактически.

Всем спасибо за размышления, все очень верно. Суть осталась та же. Буду по точкам ориентироваться. =)

elfon 16.10.2009 00:22

В голову лезет извращение:
Создать структуру( массив переменной длинны), в котором каждый элемент это код направления 1-4 и количество узлов змейки в этом направлении. Соответственно змейка строится относительно головы.

MerlinTwi 16.10.2009 11:51

А зачем дополнительные массивы? У вас же все уже запомнено, все звенья змейки стоят на своих местах. перед смещением головы надо передвинуть каждое звено на позицию перед ним стоящего звена.


Часовой пояс GMT +4, время: 21:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.