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

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

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

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
По умолчанию как передвинуть одновременно все объекты в массиве

задача такая: есть массив с обьектами. их количество всегда произвольно. от 2х и выше. необходимо, чтобы по клику включилась анимация и все эти обьекты проехали вниз определенное расстояние. расстояние для всех обьектов одинаковое. но изначальное положение обьектов по оси разное. то есть каждый обьект допустим, должен остановиться на значении у равном изначальное значение обьекта по оси у плюс определенное для всех число, ну допустим,20. как это реализовать? вот у меня сейчас так
Код:
//padeniearr-массив с обьектами
//этот код у меня в функции, которая срабатывает по клику. для всех обьектов из массива вызываю функцию по ентер фрейму
	for each(var jojo:DisplayObject in padeniearr){
addEventListener(Event.ENTER_FRAME, padenie) }
/////это функция ентер фрейма
	private function padenie (e:Event):void {
		if(e.target.y < doubleY)		{
					e.target.y += 3;}

//где doubleY -это переменная,в которую заносится значение по Y на которую опуститься
самый нижний обььект из массива. то есть когда он этого момента 
достигает-останавливается анимация. и если остальные обьекты двигались одновременно, 
то они, следовательно, сохранят прежнее расстояние относительно друг друга. на самом 
же деле когда обьект из массива опускается на нужный уровень, остальные 
обьекты не сохраняют прежнее положение относительно других. то есть из этого 
я делаю вывод, что обьекты стартуют не одновременно.глазу разница незаметна, 
но координаты обьектов после запуска такого кода говорят об обратном( 
					
			
						
						
					
						
						
				
				 }


Последний раз редактировалось Don_Vislouh; 30.03.2011 в 22:43.
Старый 30.03.2011, 23:01
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Может проще двигать контейнер, в котором все объекты лежат? А еще лучше битмапу с контейнера, если объекты статичны сами по себе.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 31.03.2011, 15:53
Don_Vislouh вне форума Посмотреть профиль Отправить личное сообщение для Don_Vislouh Найти все сообщения от Don_Vislouh
  № 3  
Ответить с цитированием
Don_Vislouh

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
Название: Безымянный.jpg
Просмотров: 412

Размер: 155.2 Кб
мне нужно чтобы вот этот выделенный массив с квадратиками опустился вниз до уровня DoubleY..бьюсь уже неделю((


Последний раз редактировалось Don_Vislouh; 31.03.2011 в 15:56.
Старый 31.03.2011, 16:32
Idon вне форума Посмотреть профиль Отправить личное сообщение для Idon Найти все сообщения от Idon
  № 4  
Ответить с цитированием
Idon

Регистрация: Sep 2009
Сообщений: 65
После того, как один из объектов пересекает линию doubleY, нужно остановить всё движение этого столбца и выстроить все объекты начиная от линии doubleY вручную через заданные толщиной промежутки, так чтобы они ровно лежали друг на друге.


Последний раз редактировалось Idon; 31.03.2011 в 16:35.
Старый 31.03.2011, 17:20
Don_Vislouh вне форума Посмотреть профиль Отправить личное сообщение для Don_Vislouh Найти все сообщения от Don_Vislouh
  № 5  
Ответить с цитированием
Don_Vislouh

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
ну это то понятно) другое дело как это реализовать) да и, как мне кажется,ваш вариант будет слишком громоздким. вообще изначально они уже выстроены на правильных расстояниях друг от друга, им нужно всего лишь изменить свою позицию по Y нельзя ли обратиться ко всему массиву как к единому целому?


Последний раз редактировалось Don_Vislouh; 31.03.2011 в 17:22.
Старый 31.03.2011, 17:31
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 6  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
вам надо пересмотреть алгоритм, в зависимости от того как он работает. Возможно есть смысл пересматривать все элементы массива с каждым EnterFrame... причём снизу

Старый 31.03.2011, 17:37
Don_Vislouh вне форума Посмотреть профиль Отправить личное сообщение для Don_Vislouh Найти все сообщения от Don_Vislouh
  № 7  
Ответить с цитированием
Don_Vislouh

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
Цитата:
Сообщение от willis83 Посмотреть сообщение
вам надо пересмотреть алгоритм, в зависимости от того как он работает. Возможно есть смысл пересматривать все элементы массива с каждым EnterFrame... причём снизу
не понял что именно вы имели в виду. мне бы вообще хорошо что нибудь конкретное.с примером. я думаю у вас опыта побольше, наверняка что то подобное решали.

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
писать что-то лень, времени и так не хватает. Я так полагаю надо все квадратики поля занести в двумерный массив. И в каждом ентер_фрэйм надо перебирать весь массив и определять стоит ли данному квадрату двигаться вниз. Например удаляется с поля не прямоугольная форма, перепроверяются все элементы массива снизу до верху и определяется сколько и кому ехать вниз.

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


Последний раз редактировалось willis83; 31.03.2011 в 17:58.
Старый 31.03.2011, 18:53
Don_Vislouh вне форума Посмотреть профиль Отправить личное сообщение для Don_Vislouh Найти все сообщения от Don_Vislouh
  № 9  
Ответить с цитированием
Don_Vislouh

Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
но есть одно но: все квадратики должны попадать на одну функцию, а так как у каждого квадратика свое изначальное значение по Y значит в этой функции должно присутствовать динамично меняющееся число? если так-то сделать его можно только циклом. попадает 1 квадратик в функцию, запустил цикл-пошел вниз, и тут приходит 2 квадратик, начинает крутить цикл для себя, и этот цикл же работает на 1 квадратик, ускоряет его скорость. а если падающих квадратиков 10 или больше то скорость станет огромна

Старый 31.03.2011, 18:57
Idon вне форума Посмотреть профиль Отправить личное сообщение для Idon Найти все сообщения от Idon
  № 10  
Ответить с цитированием
Idon

Регистрация: Sep 2009
Сообщений: 65
Don_Vislouh, в чём громоздкость? У вас есть массив, представляющий собой вертикальный столбец.

Представим, что у нас есть столбец:
1
1
0
0
1
1
1
0
0
0
1
Где-то в этом массиве есть дырка.
1) мы просматриваем все элементы, начиная с низа. После того, как мы нашли во второй позиции дырку ("0") мы присваиваем всем остальным элементам не равным 0 значения флага "падаю" = true.
1-а) У нас получилось два блока единиц, которые могут падать.

Затем в каждом кадре все элементы с флагом "падаю" смещаются на скорость падения, причём начинаете смещать элементы каждого столбца вы так же снизу.

2) Пока первый падающий элемент (самый нижний) может падать, падает он и все ненулевые элементы массива до верха, причём с одинаковой скоростью. Как только первый элемент нижнего блока единиц приземляется, вы устанавливаете его в нужное положение (потому что его новая координата у после падения может быть ниже "земли") и устанавливаете флаг "падаю" в false
3) После этого, вместо того, чтобы смещать остальные элементы массива на вектор скорости, вы выстраиваете все элементы следующие после нижнего элемента, который вы зафиксировали, друг на друга вплоть до следующей дырки, присваивая им вручную нужные координаты и устанавливая флаг "падаю" в false.
Таким образом, у вас приземлился самый нижний блок, но верхний блок единиц продолжает падать.
4) Иди в пункт 2

Замечание: Понятие "земля" (в вашем случае doubleY) для каждого столбца своё. После приземления самого нижнего блока, необходимо изменить "землю". Новой "землей" станет координата последнего падавшего элемента, после того, как он перестал падать.

Никакой громоздкости я тут не вижу. Тем более в ваших масштабах


Последний раз редактировалось Idon; 31.03.2011 в 19:19.
Создать новую тему Ответ Часовой пояс GMT +4, время: 06:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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