Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.10.2009, 22:32
Sapfir вне форума Посмотреть профиль Отправить личное сообщение для Sapfir Найти все сообщения от Sapfir
  № 1  
Ответить с цитированием
Sapfir

Регистрация: Mar 2002
Сообщений: 47
По умолчанию Повторение движений объектами за другим объектом

Вопрос имеет к ActionScript 3 косвенное отношение, но все же.

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

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

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

Старый 15.10.2009, 22:47
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 2  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
В классической змейке массив координат, растущий при увеличении длины змейки. Зачем вам нужен рост массива каждые 30 мсек? Это ведь 33 добавленных звена в секунду, а за минуту под 2000 звеньев.

Старый 15.10.2009, 22:56
Sapfir вне форума Посмотреть профиль Отправить личное сообщение для Sapfir Найти все сообщения от Sapfir
  № 3  
Ответить с цитированием
Sapfir

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

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

Старый 15.10.2009, 23:04
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 4  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Изменение координат и рост массива - это разные вещи. Массив должен увеличиваться только при добавлении звеньев. В случае плавного движения размер массива будет количество звеньев * задержка в кадрах между первым и вторым звеньями (расстояние между звеньями будет зависеть от скорости первого звена и от этой задержки).

Старый 15.10.2009, 23:05
alecsisk вне форума Посмотреть профиль Отправить личное сообщение для alecsisk Найти все сообщения от alecsisk
  № 5  
Ответить с цитированием
alecsisk

Регистрация: Feb 2008
Адрес: N.Novgorod
Сообщений: 80
Отправить сообщение для alecsisk с помощью ICQ
можно запоминать координаты каждого звена змейки в массив. Получиться один массив из обьектов Point(x,y). Незнаю как с производительностью, но работать будет. Каждые 30мс мы пробегаемся по массиву, 0 элемент (1 звено) становиться новым Point, т.к. мы сдвинулись. 1 становиться 2 и так далее....последний удаляется. Вместе с массивом добавим переменную maxLenght - сколько звеньев в змейке может быть максимальным. Соотвественно при взятии бонуса maxLenght растёт.

Старый 15.10.2009, 23:07
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Почему 5 и почему массивов? Я с ходу один вектор насчитал...
Код AS3:
var path:Vector.<Matrix> = new Vector.<Matrix>(maxLength);
// если элементы поворачиваются по дороге
var path:Vector.<Point> = new Vector.<Point>(maxLength);
// если элементы только сдвигаются
Можно, конечно, сделать и не фиксированой длины, а наращивать по мере прибавления элементов.
__________________
Hell is the possibility of sanity

Старый 15.10.2009, 23:46
Sapfir вне форума Посмотреть профиль Отправить личное сообщение для Sapfir Найти все сообщения от Sapfir
  № 7  
Ответить с цитированием
Sapfir

Регистрация: Mar 2002
Сообщений: 47
VVall

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

wvxvw

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

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

Старый 16.10.2009, 00:22
elfon вне форума Посмотреть профиль Отправить личное сообщение для elfon Найти все сообщения от elfon
  № 8  
Ответить с цитированием
elfon
 
Аватар для elfon

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

Старый 16.10.2009, 11:51
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 9  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
А зачем дополнительные массивы? У вас же все уже запомнено, все звенья змейки стоят на своих местах. перед смещением головы надо передвинуть каждое звено на позицию перед ним стоящего звена.
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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