|
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Меню-карусель
Доброго времени суток.
Только учусь AS но загорелся я таким меню и незнаю как его реализовать. Нашел на AS1/AS2 простенький пример карусели, думаю его немного модернизовать и сделать из него меню, но сначала нужно написать то же на AS3. Пробовал я перевести его но не получается по незнанию. Прошу о помощи. Вот код на AS1/AS2: var numOfBalls:Number = 10; var radiusX:Number = 250; var radiusY:Number = 75; var centerX:Number = Stage.width / 2; var centerY:Number = Stage.height / 2; var speed:Number = 0.05; for(var i=0;i<numOfBalls;i++) { var t = this.attachMovie("ball","b"+i,i+1); t.angle = i * ((Math.PI*2)/numOfBalls); t.onEnterFrame = mover; } function mover() { this._x = Math.cos(this.angle) * radiusX + centerX; this._y = Math.sin(this.angle) * radiusY + centerY; var s = this._y /(centerY+radiusY); this._xscale = this._yscale = s*100; this.angle += this._parent.speed; this.swapDepths(Math.round(this._xscale) + 100); } this.onMouseMove = function() { speed = (this._xmouse-centerX)/1500; } |
|
|||||
стервочка (я мужик)
|
тоесть вы хотите, что бы за Вас полностью написали класс? раздел работы тут недалеко.
П.С.: обычно в этом разделе спрашивают о проблемах, а не просят сделать всё за них. |
|
|||||
Modus ponens
|
Если вы код, как есть перенесете в класс-файл, оформите его в класс, привяжете его к клипу в библиотеке, замените свойства с подчерком на аналогичные из АС3, swapDepth() на swapChildrenAt(), attachMovie() на addChild(new SomeMyMenuItem()), замените обработчики событий на функции слушающие соответствующие события - по идее будет работать.
Из недостатков этого: кода - t лучше было объявить вне функции. Использовать обращения к свойствам там, где нужно быстро посчитать - не продуктивно. Нет никакой необходимости динамически создавать свойства. Нет типизации.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Цитата:
Цитата:
Вот что я сделал: На таймлайне пусто, в библиотеке есть мувиклип "item" которому присвоен несуществующий класс main.Item, Document class: main.Carousel. Вот сам main.Carousel, но он сделан до той степени до какой смог: package main{ import flash.display.MovieClip; import flash.events.*; public class Carousel extends MovieClip{ var numOfItems:Number = 1; var radiusX:Number = 250; var radiusY:Number = 75; var centerX:Number = stage.stageWidth/2; var centerY:Number = stage.stageHeight/2; var speed:Number = 0.05; function Carousel(){ for (var i=0; i<numOfItems; i++){ var t = this.addChild(new Item()); //Скорей всего это неправильно, но незнаю как правильно t.angle = i * ((Math.PI*2)/numOfItems); t.addEventListener(Event.ENTER_FRAME, mover); } } private function mover(){ //Тут нечто изменил, но пока незнаю правильно ли, ибо еще не дошел. Пробовал компилить, ошибки выдает по поводу angle. /*this.x = Math.cos(this.angle) * radiusX + centerX; this.y = Math.sin(this.angle) * radiusY + centerY; var s = this.y /(centerY+radiusY); this.xscale = this.yscale = s*100; this.angle += this(parent).speed; this.swapChildrenAt(Math.round(this._xscale) + 100);*/ } } } Помогите пожалуйста разобратся. Последний раз редактировалось N1ka; 02.07.2008 в 16:06. |
|
|||||
не верна эта строка, я думаю вернее будет так
правда не знаю как отреагирует флеш на то что этот класс не существует, но вроде как н автоматом создает его, просто пустой, наверное будет все норм) |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Какой класс не существует?
|
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Цитата:
Я пробовал раньше так: Но у меня не компилилось потому что это несуществующий класс, да еще и подсказка wvxvw была "attachMovie() на addChild(new SomeMyMenuItem())", то я решил что мой вариант не правильный. main.Item Может я вообще должен Document class оставить пустым, а main.Carousel присвоить мувиклипу "item", но тогда там тоже с этим addChild незнаю как поступить. Потому не делал так, да еще и в оригинале весь код писался не на мувиклип, а в первом кадре. Эхх, и как же мне поступить с этим addChild и переменной t? И правильно ли я присвоил классы? Не совсем понял wvxvw и ramshteks. Последний раз редактировалось N1ka; 02.07.2008 в 16:09. |
|
|||||
ну как я понял класс Item это пустой класс прилепленный к мувику...
|
|
|||||
нет... ты напиши сам класс Item запихни туда все обработчики событий. Как я понял Item это мувик в будущем? знач все что этот мувик сам с собой сделать может запихни в этот класс.
а создавай так: |
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Цитата:
package main{ import flash.display.MovieClip; public class Item extends MovieClip{ function Item(){ //Cоздается отражение masker.cacheAsBitmap = ref.cacheAsBitmap = true; ref.mask = masker; } } } package main{ import flash.display.MovieClip; import flash.events.*; public class Carousel extends MovieClip{ var numOfItems:Number = 1; var radiusX:Number = 250; var radiusY:Number = 75; var centerX:Number = stage.stageWidth/2; var centerY:Number = stage.stageHeight/2; var speed:Number = 0.05; function Carousel(){ for (var i=0; i<numOfItems; i++){ var menuItem:Item = new Item(); menuItem.name = "item"+i //Это чтобы было похоже на var t = this.attachMovie("ball","b"+i,i+1);, тоесть чтобы каждый item имел название +i, незнаю правильно ли addChild(menuItem); menuItem.angle = i * ((Math.PI*2)/numOfItems); //А вот тут ошибка, из-за нее я и решил обратится на форум, потому что думал что наблудил с Item и addChild. Ошибка вот такая: 1119: Access of possibly undefined property angle through a reference with static type main:Item. menuItem.addEventListener(Event.ENTER_FRAME, mover); } } private function mover(){ /*this.x = Math.cos(this.angle) * radiusX + centerX; this.y = Math.sin(this.angle) * radiusY + centerY; var s = this.y /(centerY+radiusY); this.xscale = this.yscale = s*100; this.angle += this(parent).speed; this.swapChildrenAt(Math.round(this._xscale) + 100);*/ } } } |
Часовой пояс GMT +4, время: 07:24. |
|
« Предыдущая тема | Следующая тема » |
|
|