![]() |
"Расплывание" формы по кругу
Подскажите реализации следующей задумки:
Имеется прямоугольник, например 600х200 пикселей, этот прямоугольник разбит на маленькие квадратики 10х10 пикселей(имеем 1200 маленьких квадратиков). Задача состоит в том, чтобы эти квадратики проявлялись по мере "расплывания" невидимой окружности от левого верхнего края прямоугольника. Т.е. как только расплываемая окружность "наплывает" на центр очередного квадратика, этот квадратик проявляется в главной сцене. Вообщем надо создать эффект плавного проявления прямоугольника по увеличивающийся окружности. Я думал создать shape с point'ами центров этих квадратиков и потом скейлить шейп с окружностью и по мере этого hitTestPoint'ом проверять "налезла" ли эта окружность на очередной поинт, если да, то проявлять нужный квадратик на главной сцене.... только с реализацией туговато. Может кто-нибудь подскажет более рациональную идею... Заранее спасибо. |
willis83, спам в ваших постах от ваших вирусов предлагаете мне вычищать?
|
Дико извиняюсь
Добавлено через 1 час 10 минут Разобрался. Циклом создал 1200 (60х20) точек(Point) с нужными координатами, занёс все в массив. Создал шейп с кругом, по таймеру скэйлю круг и тут же проверяю на hitTestPoint все поинты через массив. Те которые попадают под круг, создают класс маленького квадратика с координатами из массива. Правда нагрузка наверное сумашедшая, получается за каждые 40 млсек (25fps), он проверяет совпадения у 1200 точек. Можно было бы разгрузить если массив был бы многомерным, но чё-то не получается многомерный массив у меня создать (( Добавлено через 5 часов 8 минут Всё написал и возник такой вопрос: Почему hitTestPoint срабатывает не в момент наложения фигуры на точку а в момент наложения рамки от фигуры на точку? И можно ли это как-то исправить? Получается растекание по прямоугольнику, а не по кругу ((( Добавлено через 8 часов 6 минут во всём разобрался, тему можно закрыть ))) сам спросил, сам ответил, млин |
>>сам спросил, сам ответил, млин.
Не ответил как от рамки избавиться. Напиши, если не затруднит. |
willis83, а тебе не кажется, что ты перегнул палку с HitTestPoint? а как же старая добрая математика? пересечение точки с окружностью считается на раз-два: если расстояние меньше или равно радиусу окружности - значит пересеклись.
то есть, если выполняется условие: (x1-x2)^2+(y1-y2)^2 < R^2 значит точка (x2, y2) пересеклась с окружностью, центр которой в (x1, y1) и радиус которой равен R. А для того, чтобы было меньше тормозов - создай список точек, которые еще не пересеклись, и когда они будут пересекаться - удаляй из списка, чтобы больше не проверять пересечения с ними. желаю успехов, GL & HF кстати в твоем случае, если центр окружности неподвижный и радиус растет по известному тебе закону - можно заранее рассчитать время появления квадратиков через расстояние от каждого из них до центра окружности и не проверять пересечения каждый кадр а просто ждать определенное время до появляения. |
MidnightOne, у метода hitTestPoint 3 входящих параметра - координата х точки, координата у и флаг ShapeFlag, по умолчанию он идёт как false, но если поставить true, то hitTest идёт по фигуре.
NeonSelf, да, ты прав. Геометрия лучше любых методов. Сейчас попробую переписать по формулам. Правда прогонять всё равно придётся через весь массив, даже если записать в массиве кроме х и у ещё и длину до центра окружности(чтобы лишний раз не просчитывать её в каждом фрэйме). Разгрузка ЦП скорее всего будет, хотя и неуверен что очень большая, вообщем и так не особо шкалит, на моём 2ух ядерном intel T2310 больше 27% загрузки ЦП не наблюдается, абсолютно без тормозов. А по поводу удаление уже попавших точек это само собой разумеющееся, они же так будут заново вызывать класс квадратиков(в моём случае квадратики вынесены в отдельный класс, т.к. имеют анимацию появления) Добавлено через 11 минут а на счёт того, что расчитывать всё проявления по геометрическим формулам учитывая постоянные скорости и правильные формы, то это не подходит, т.к. проявляться будут не только по кругу но и другим геометрическим формам, и там уже легче через hitTest чем геометрией |
| Часовой пояс GMT +4, время: 09:14. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.