![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Но ведь класс создан создателем, причем имеет в себе довольно простые функции, которые влияют лишь на мячик? Не для это разве пишутся паблик функции в классе, чтобы им можно было управлять извне? Плюс интерфейсы, который сделают мячик "физическим телом", к примеру?
То есть если делать классы, то делать полностью универсальными и редко ими пользоваться? Если футбольное поле, то не класс поле, в нем экземпляр мячика (композиция применяется), экземпляры детей и экземпляр трава, к примеру, а класс поле, а в нем функции "дети, мячик, трава" и в каждой куча кода и куча своих переменных и для управления каждым нужном создавать каждому по 3-4 функции все это внутри класса поля? Разве не от такой системы идет переход в AS3 и ООП? Моя видимость такая: Класс field: -рисует поле графикой, создает координаты как числа. -экземпляр класса ball, который присваивается переменной, как ball:FootballBall = new FootballBall(ширина и высота поля) -10 экземпляров класса child, которые присваиваются массиву allChildren[i] = new ChildPlayer(объект, на который они будут влиять, пинать, играть с ним. в нашем случае это ball) Класс ball: функции, отвечающие за физическое поведение шара при воздействии на него. я в физике не очень, но например он и так и так будет толкаться детьми, но при воздействии в классе child функции к примеру kickTheBall он будет лететь с переменными взятыми от класса ребенок от функции kickTheBall. Класс child: функции имитации ИИ, пробежка, столкновение с другими экзмеплярами класса child и конечно же функции пинания мячика. То есть я вообще не беру в расчет наследование, которое тут для каждого класса это extends Sprite для отображения. В плане композиции. Разве так не проще будет для создателя, разграничить все это? При возможностях dispatchEvent-а кстати и пользовательских евентов, не проще ли будет такая проектировка? Вы можете взглянуть на мой пример, он есть в этой теме, Random Ball класс. Может у нас недопонимание или я действительно сильно сильно себе где-то усложняю кодинг. |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 77
|
Цитата:
Цитата:
var bl:Ball; // объявляю в глобальной части bl = new Ball(0x00ff00,2); // в конструкторе addChild(bl); Цитата:
//............. import flash.utils.Timer; public class SuperCircle extends MovieClip { var bl:MovieClip; // ----- 1 //................... public function SuperCircle() { for (var i:uint=0;i<50;i++){ bl = this.addChild(new Ball(0x00ff00, 2)) as MovieClip; // ----- 2 //...................... bl.addEventListener(MouseEvent.MOUSE_OUT, onMO); Еще раз выкладываю скомпилированную флешку для наглядности проблемы. Для первой флешки используется объявление обработчика события MOUSE_OUT приведенная ниже (реагирует крайний правый шарик): Вторая флешка разбрасывает шарики, но при этом и кнопку запускает в полет, что крайне ненужно. |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 77
|
Цитата:
|
|
|||||
|
Приведу свой пример.
Вот простенькая не интерактивная, обычная галерея: http://testcreation.16mb.com/ Сделал ее так. Расскажу про именно галерею, а не меню. Класс галерея. В нем 16 экземпляров класса Thumbnail. В каждом Thumbnail по экземпляру класса smallImage, который подгружает картинку. В классе gallery есть еще класс bigPicture. Разбор xml через цикл происходит в классе Gallery, главном. То есть, добавив класс Gallery, можно сразу получить галлерею. А если еще в конструкторе требовать ссылку на определенный xml и сделать галерею интерактивной (если больше 16-и элементов, к примеру, то будет прокрутка или стрелки дальше-назад) то класс Gallery, собрав в себя, конечно другие классы, создает такую галерею. Как происходит взаимодействие между элементами и вообще проверка, если нажать на маленькую картинку, чтобы она показала большую (не буду же я создавать в каждой картинке свой экземпляр bigPicture). Происходит множественная привязка листенеров на пользовательские события. Далее, при нажатии к примеру, маленькая картинка кидает в класс Gallery событие "clicked". Т.к. во время цикла в Gallery каждому экземпляру Thumbnail был привязан листенер, он отлавливает clicked и собирает переменную со ссылкой на увеличинную картинку (а вот эта переменная уже помещена в каждый Thumbnail). То есть грубо говоря так: arrayOfThumnails.[i].addEventListener("clicked", thumbClicked) function thumbClicked (e:Event) { //большая картинка уже есть, просто она не показывается без функции showPicture bigPicture.showPicture(new URLRequest(e.currentTarget.bigPictureLink); } Трудно было просто всю лестницу диспатчИвентов раскидать, чтобы все друг с другом взаимодействовало, но разве не проще, чем в одном классе все это расписать на 200 строк кода? Добавлено через 4 минуты Сейчас посмотрю ваши файлы, может пойму, помогу ![]() Добавлено через 7 минут Так, если я понял. Вы присваиваете к bl листенер, да? А перед этим через одну единственную переменную перетаскиваете всю свору шариков, да? Если так, чтобы они не реагировали все, делайте массив. Каждому новому шарику ballsArray[i] где i - то число в цикле. Добавлено через 20 минут for (var i:uint=0;i<50;i++){ arrayOfBalls[i] = new Ball(0x00ff00,2); addChild(arrayOfBalls[i]); arrayOfBalls[i].x = 100 + (i*arrayOfBalls[i].width); arrayOfBalls[i].y = 100; _dictionary[arrayOfBalls[i]] = [arrayOfBalls[i].x, arrayOfBalls[i].y]; arrayOfBalls[i].addEventListener(MouseEvent.MOUSE_OUT, onMO); } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
@SpetZ_Naz
Цитата:
Цитата:
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 77
|
Цитата:
Цитата:
Wolsh, же мне выше писал чтоб я перенес строчку объявления события в тело массива, а я... for (var i:uint=0;i<50;i++){ bl = this.addChild(new Ball(0x00ff00, 2)) as MovieClip; bl.x = 100 + (i*bl.width); bl.y = 100; _dictionary[bl] = [bl.x, bl.y]; bl.addEventListener(MouseEvent.MOUSE_OUT, onMO); //злосчастный перенос строчки } В общем-то часть задачи решена, но у нее есть продолжение, над которым я буду дальше мучиться и будут появляться вопросы.. Думаю пока что тему можно не закрывать, тут много интересных мыслей прозвучало и может кому-то из таких же начинающих, эта информация будет полезна. Спасибо. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Но это не Ваша вина.
__________________
Reality.getBounds(this); |
|
|||||
|
Да, но у вас все еще работает одна ссылка на все шарики. Я могу быть не прав, но может в массив их запихнуть все?)
Насчет добавить в класс обработчик события да, я это имел ввиду, кидая вам класс RandomBall. Там класс и в нем и обработчик и рисование шарика. Единственное, что он берет извне - координаты где нарисовать его в первые раз и куда он будет возвращаться. |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 77
|
Цитата:
|
|
|||||
|
Это кстати одновременно и странно и интересно
Я думал вы специально это сделали, чтобы они как гусеницы подползали))Что даст... Вообще, если вы не собираетесь их потом удалять поочередно или удалять будете просто с помощью событий, для каждого отдельно - ничего. Не знаю, я привык, чтобы у каждого объекта была своя ссылка. В одном прошлом случае, пронеси кучу экземпляров через одну переменную - приводило к зависаниям и остановке анимации (безсылочные экземпляры попадали в Garbage Collection). |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|