![]() |
как передвинуть одновременно все объекты в массиве
задача такая: есть массив с обьектами. их количество всегда произвольно. от 2х и выше. необходимо, чтобы по клику включилась анимация и все эти обьекты проехали вниз определенное расстояние. расстояние для всех обьектов одинаковое. но изначальное положение обьектов по оси разное. то есть каждый обьект допустим, должен остановиться на значении у равном изначальное значение обьекта по оси у плюс определенное для всех число, ну допустим,20. как это реализовать? вот у меня сейчас так
Код:
//padeniearr-массив с обьектами |
Может проще двигать контейнер, в котором все объекты лежат? А еще лучше битмапу с контейнера, если объекты статичны сами по себе.
|
Вложений: 1
Вложение 26362
мне нужно чтобы вот этот выделенный массив с квадратиками опустился вниз до уровня DoubleY..бьюсь уже неделю(( |
После того, как один из объектов пересекает линию doubleY, нужно остановить всё движение этого столбца и выстроить все объекты начиная от линии doubleY вручную через заданные толщиной промежутки, так чтобы они ровно лежали друг на друге.
|
ну это то понятно) другое дело как это реализовать) да и, как мне кажется,ваш вариант будет слишком громоздким. вообще изначально они уже выстроены на правильных расстояниях друг от друга, им нужно всего лишь изменить свою позицию по Y нельзя ли обратиться ко всему массиву как к единому целому?
|
вам надо пересмотреть алгоритм, в зависимости от того как он работает. Возможно есть смысл пересматривать все элементы массива с каждым EnterFrame... причём снизу
|
Цитата:
|
писать что-то лень, времени и так не хватает. Я так полагаю надо все квадратики поля занести в двумерный массив. И в каждом ентер_фрэйм надо перебирать весь массив и определять стоит ли данному квадрату двигаться вниз. Например удаляется с поля не прямоугольная форма, перепроверяются все элементы массива снизу до верху и определяется сколько и кому ехать вниз.
Добавлено через 5 минут проще будет создать класс квадратика, с логикой на клик мыши, сменой цвета и другой логикой по игре. и в этот же класс внести булевое свойство которое будет определять нужно ли этому квадратику сползать вниз, далее в конец функции которая убирает квадратики одно цвета добавить перебир всех квадратиков из массива и тем которым надо сползать вниз флаг ставить в true, а далее запускать функцию которая будет все квадраты с флагом true спускать вниз |
но есть одно но: все квадратики должны попадать на одну функцию, а так как у каждого квадратика свое изначальное значение по Y значит в этой функции должно присутствовать динамично меняющееся число? если так-то сделать его можно только циклом. попадает 1 квадратик в функцию, запустил цикл-пошел вниз, и тут приходит 2 квадратик, начинает крутить цикл для себя, и этот цикл же работает на 1 квадратик, ускоряет его скорость. а если падающих квадратиков 10 или больше то скорость станет огромна
|
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) для каждого столбца своё. После приземления самого нижнего блока, необходимо изменить "землю". Новой "землей" станет координата последнего падавшего элемента, после того, как он перестал падать. Никакой громоздкости я тут не вижу. Тем более в ваших масштабах |
| Часовой пояс GMT +4, время: 07:13. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.