![]() |
Меню-карусель
Вложений: 1
Доброго времени суток.
Только учусь AS но загорелся я таким меню и незнаю как его реализовать. Нашел на AS1/AS2 простенький пример карусели, думаю его немного модернизовать и сделать из него меню, но сначала нужно написать то же на AS3. Пробовал я перевести его но не получается по незнанию. Прошу о помощи. Вот код на AS1/AS2: Код:
var numOfBalls:Number = 10; |
тоесть вы хотите, что бы за Вас полностью написали класс? раздел работы тут недалеко.
П.С.: обычно в этом разделе спрашивают о проблемах, а не просят сделать всё за них. |
Если вы код, как есть перенесете в класс-файл, оформите его в класс, привяжете его к клипу в библиотеке, замените свойства с подчерком на аналогичные из АС3, swapDepth() на swapChildrenAt(), attachMovie() на addChild(new SomeMyMenuItem()), замените обработчики событий на функции слушающие соответствующие события - по идее будет работать.
Из недостатков этого: кода - t лучше было объявить вне функции. Использовать обращения к свойствам там, где нужно быстро посчитать - не продуктивно. Нет никакой необходимости динамически создавать свойства. Нет типизации. |
Цитата:
Цитата:
Код:
var t = this.attachMovie("ball","b"+i,i+1);Вот что я сделал: На таймлайне пусто, в библиотеке есть мувиклип "item" которому присвоен несуществующий класс main.Item, Document class: main.Carousel. Вот сам main.Carousel, но он сделан до той степени до какой смог: Код:
package main{Помогите пожалуйста разобратся. |
Код:
var t = this.addChild(new Item());Код:
addChild(new Item()) |
Цитата:
|
Цитата:
Я пробовал раньше так: Код:
var t:Item = new Item();Цитата:
Может я вообще должен Document class оставить пустым, а main.Carousel присвоить мувиклипу "item", но тогда там тоже с этим addChild незнаю как поступить. Потому не делал так, да еще и в оригинале весь код писался не на мувиклип, а в первом кадре. Эхх, и как же мне поступить с этим addChild и переменной t? И правильно ли я присвоил классы? Не совсем понял wvxvw и ramshteks.:wacko: |
ну как я понял класс Item это пустой класс прилепленный к мувику...
|
нет... ты напиши сам класс Item запихни туда все обработчики событий. Как я понял Item это мувик в будущем? знач все что этот мувик сам с собой сделать может запихни в этот класс.
а создавай так: Код:
var menuItem:Item=new Item(); |
Цитата:
Код:
package main{Код:
package main{ |
ну дружок...) а у тя свойство angle есть?) судя по всему нет))
если ты имел ввиду свойство мувика отвечающее за поворот то нужно использовать rotation вместо angle )) а еще... код вызывает сомнение : Код:
masker.cacheAsBitmap = ref.cacheAsBitmap = true; |
Цитата:
А этот код: Код:
masker.cacheAsBitmap = ref.cacheAsBitmap = true;Итак, меню-карусель близка к финишу, вот код main.Carousel, который уже должен работать, но... Код:
package main{ArgumentError: Error #1063: Argument count mismatch on main::Carousel/::mover(). Expected 0, got 1. и не работает. В чем трабл? |
Код:
private function mover(evt:Event){ |
Цитата:
TypeError: Error #1006: value is not a function. at main::Carousel/::mover() Но зато на экране наконец-то появился один menuItem, такой красивый, с отражением. Ура! ПС. А какая разница между (e:Event), (evt:Event), (event:Event)? А если нет разницы, то зачем писать "e" или "evt" или "event"? |
Цитата:
|
слушай проблема может быть в обработчике событий...
сделай одну вещь... перенеси фун-цию мувер в Item и там же прикрепляй событие к мувику... а в карусели только создавай и аттач мувики, но не работай с событиями |
Цитата:
Код:
private function mover(event:Event){Код:
var numOfItems:Number = 1;Код:
var numOfItems:Number = 10; |
так проблемка та наверное в том, что ты и не создаешь их... вернее создаешь, но каждый раз перезаписываешь...
Код:
function Carousel(){ |
Цитата:
Как я и говорил ранее "вместо десяти menuItem бегает всего лишь один, быстрее чем нужно и мало того, еще и боком, тоесть сам menuItem перекручен на несколько градусов". Удивительно, результат тот же что и предыдущий несмотря на то что main.Carousel.as с измененным кодом я сохранил. :away: И еще одно наблюдение, menuItem когда бегает по кругу, он бегает не стабильно перекручена несколько градусов, а бегает по кругу и постепенно перекручивается что аж верхногами кружиться и т.д... И еще наблюдение, что я пропустил, даже если создать один menuItem Код:
var numOfItems:Number = 1;Код:
this.rotation += this.speed;Исходя из этого приходит мысль о том что старый Код:
menuItem.angleКод:
menuItem.rotationКод:
menuItem.angle = i * ((Math.PI*2)/numOfItems); |
то что переворачивается... это у тя дело просто в геометрии...
задавать угол поворота тока через rotation, задавать надо в градусах angle вообще первый раз слышу такое свойство, скажи где ты его взял?) кинь сюда свой проект как он есть плиз! хочу посмотреть воочую! |
Вложений: 1
Привет
вот на вскидку =) Код:
package |
Вложений: 2
Цитата:
Цитата:
Вот даю рабочий пример карусели на AS1/AS2, там видно что за angle и еще многое видно. И вот еще даю ту карусель что у нас получилась на AS3, чтоб увидеть наглядно что и как. Кстати уже скорость карусели указывает положение курсора мышки. |
ИЗУЧАЙ!!)
Вложений: 1
изучай студент ) оба класса подробно изучи :cool:
Удачи в начинаиях) а проблема именно в геометрии у тебя была) и обрати внимание на то что такое angle! я блин до этого не вдовался в подробности) англе отвечает за расстановку по круга итемов) а я думал те надо сам итем повернуть ))) |
вот есть не большой еще пример
В подобных карусельках весь принцип базируется на следующей формуле: почитай |
О, спасибо вам, друзья. Буду стараться так, чтобы больше не задавать вопросов, а самому быть способным отвечать на них, но у меня впереди еще много планов... :victory:
|
Дерзай)
Удачи ) |
Вложений: 1
Вернулся все-таки. :rolleyes:
Но тут уже аномалия для меня, смотрите сами: Есть 10 итемов, все сидят на своих местах кроме одного, т.е. если дергать мышкой туда-сюда чтобы итемы дергались также в одну сторону и потом резко в другую, то выделяется один итем, он со старта поясвляется самый правый. Так вот, если дергать туда-сюда, то он будто по льду ездит, т.е. не сидит на своем месте, все дергаются резко, а этого одного итема заносит. Этой проблемы небыло когда к мувиклипе item в присвоенном классе main.Item была написана функция с просчетом движения этих итемов. Но когда я эту функцию перенес по причине в класс Carousel который присвоен Document class, то вот появилась такая проблема. Это не должно быть, почему оно так и как его устранить? Вот мувик: |
такой своего рода разрыв цепи.. кидай проект, ща посмотрю, все равно делать нефик)
|
Вложений: 1
Цитата:
|
честно говоря проблемы не увидел! все вроде норм...
Слушай хочешь бесплатный совет! он тебе потом оч поможет) |
Цитата:
А совет да еще и даром... Хочу!:) |
Почитай про ооп. Ты не используешь потенциала этой прекрасной вещи )
зачем ты заставляешь сторонний класс полностью осуществлять работу другого, это просто напросто нарушает все принципы ооп. если есть вещи которые должны упрявляться из вне создается интерфейс, для доступа к данным класса используются сеттеры и геттеры, для чего тебе методы?) настоятельно рекомендую изучить три главных столпа ооп: наследование, полиморфизм и инкапсуляция Я ручаюсь что тебе это пригодится) а так получается что ты чуть ли не на первом скрипте кодишь... не гут это |
Цитата:
А так, спасибо за совет, попробою сделать как советуешь, и возможно немного код переделать по законам ООП и тогда может и эта проблема с одним итемом пропадет. |
советую почитать книгу макконела называется "Совершенный код"
хорошая книга для программиста на любом языке, есть про все) твой код станет гораздо лучше) |
Спасибо.
|
Хотел сделать код таким как советовал ramshteks, сделал, и проблема с тем итемом что велял исчезла. Но, но я никак не могу сделать чтобы работало перекрытие (функция sortBySize) после того как немного изменил код. Я так понимаю что или в Item вызывать ее нужно из Carousel, или если ее поместить в Item, тогда нужно как-то найти там itemArray что в Carousel, что мне кажеться странным. Короче говоря, я незнаю как такое реализовать, искал - не нашел, может потому что незнал что толком искать.
Вот, посмотрите сами: Document class: main.Carousel Код:
package main {Код:
package main { |
возможным решением данно проблемы было бы передача в каждый итем ссылок на соседние итемы, и чтоб этот итем просто менялся с ними глубинами или уровнями как сказать правильно не знаю, при определенных условиях, а именно на крайних(с права и слева) точках!
|
Вложений: 1
Нашлось время и я опять взялся за карусельку.
Итак, увидел красивую карусельку с подсказками (AS1/AS2), захотел, сделал, но. Но вот у меня компилируется и работает роде как надо, но каждый кадр выдает ошибку, дебаг мод показал в каких строчках: Код:
TypeError: Error #1009: Cannot access a property or method of a null object reference.Вот main.Carousel.as: Код:
package main {Код:
package main {Может кто поймет что я хотел обьяснить и поможет, надеюсь... Но спасибо что и так уже много помогли, надеюсь это не конец вашей милости. :rolleyes: Вот проект: |
сорри поторопился с выводом!
|
вот так должна выглядеть 14ая строка
Код:
private var rollOverTarget:MovieClip=new Item; |
| Часовой пояс GMT +4, время: 16:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.