![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: 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. |
|
|||||
|
Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
|
мне нужно чтобы вот этот выделенный массив с квадратиками опустился вниз до уровня DoubleY..бьюсь уже неделю(( Последний раз редактировалось Don_Vislouh; 31.03.2011 в 15:56. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 65
|
После того, как один из объектов пересекает линию doubleY, нужно остановить всё движение этого столбца и выстроить все объекты начиная от линии doubleY вручную через заданные толщиной промежутки, так чтобы они ровно лежали друг на друге.
Последний раз редактировалось Idon; 31.03.2011 в 16:35. |
|
|||||
|
Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
|
ну это то понятно) другое дело как это реализовать) да и, как мне кажется,ваш вариант будет слишком громоздким. вообще изначально они уже выстроены на правильных расстояниях друг от друга, им нужно всего лишь изменить свою позицию по Y нельзя ли обратиться ко всему массиву как к единому целому?
Последний раз редактировалось Don_Vislouh; 31.03.2011 в 17:22. |
|
|||||
|
вам надо пересмотреть алгоритм, в зависимости от того как он работает. Возможно есть смысл пересматривать все элементы массива с каждым EnterFrame... причём снизу
|
|
|||||
|
Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
|
не понял что именно вы имели в виду. мне бы вообще хорошо что нибудь конкретное.с примером. я думаю у вас опыта побольше, наверняка что то подобное решали.
|
|
|||||
|
писать что-то лень, времени и так не хватает. Я так полагаю надо все квадратики поля занести в двумерный массив. И в каждом ентер_фрэйм надо перебирать весь массив и определять стоит ли данному квадрату двигаться вниз. Например удаляется с поля не прямоугольная форма, перепроверяются все элементы массива снизу до верху и определяется сколько и кому ехать вниз.
Добавлено через 5 минут проще будет создать класс квадратика, с логикой на клик мыши, сменой цвета и другой логикой по игре. и в этот же класс внести булевое свойство которое будет определять нужно ли этому квадратику сползать вниз, далее в конец функции которая убирает квадратики одно цвета добавить перебир всех квадратиков из массива и тем которым надо сползать вниз флаг ставить в true, а далее запускать функцию которая будет все квадраты с флагом true спускать вниз Последний раз редактировалось willis83; 31.03.2011 в 17:58. |
|
|||||
|
Регистрация: Feb 2011
Адрес: x=0;у=0; да да, я в 2D))
Сообщений: 17
|
но есть одно но: все квадратики должны попадать на одну функцию, а так как у каждого квадратика свое изначальное значение по Y значит в этой функции должно присутствовать динамично меняющееся число? если так-то сделать его можно только циклом. попадает 1 квадратик в функцию, запустил цикл-пошел вниз, и тут приходит 2 квадратик, начинает крутить цикл для себя, и этот цикл же работает на 1 квадратик, ускоряет его скорость. а если падающих квадратиков 10 или больше то скорость станет огромна
|
|
|||||
|
Регистрация: 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, время: 07:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|