|
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Цитата:
А совет да еще и даром... Хочу! Последний раз редактировалось N1ka; 04.07.2008 в 21:10. |
|
|||||
Почитай про ооп. Ты не используешь потенциала этой прекрасной вещи )
зачем ты заставляешь сторонний класс полностью осуществлять работу другого, это просто напросто нарушает все принципы ооп. если есть вещи которые должны упрявляться из вне создается интерфейс, для доступа к данным класса используются сеттеры и геттеры, для чего тебе методы?) настоятельно рекомендую изучить три главных столпа ооп: наследование, полиморфизм и инкапсуляция Я ручаюсь что тебе это пригодится) а так получается что ты чуть ли не на первом скрипте кодишь... не гут это |
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Цитата:
А так, спасибо за совет, попробою сделать как советуешь, и возможно немного код переделать по законам ООП и тогда может и эта проблема с одним итемом пропадет. |
|
|||||
советую почитать книгу макконела называется "Совершенный код"
хорошая книга для программиста на любом языке, есть про все) твой код станет гораздо лучше) |
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Спасибо.
|
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Хотел сделать код таким как советовал ramshteks, сделал, и проблема с тем итемом что велял исчезла. Но, но я никак не могу сделать чтобы работало перекрытие (функция sortBySize) после того как немного изменил код. Я так понимаю что или в Item вызывать ее нужно из Carousel, или если ее поместить в Item, тогда нужно как-то найти там itemArray что в Carousel, что мне кажеться странным. Короче говоря, я незнаю как такое реализовать, искал - не нашел, может потому что незнал что толком искать.
Вот, посмотрите сами: Document class: main.Carousel package main { import flash.display.MovieClip; public class Carousel extends MovieClip { private var numOfItems:uint = 10; private var itemArray:Array = new Array; public function Carousel() { for (var i:uint = 0; i < numOfItems; i++) { var item:Item = new Item(); item.angl = i * ((Math.PI * 2) / numOfItems); itemArray.push(item); addChild(item); } } //Работало когда тут стояла функция enterFrameHandler /*public function sortBySize():void { itemArray.sortOn("scaleX", Array.DESCENDING | Array.NUMERIC); itemArray.reverse(); for(var i:uint = 0; i < itemArray.length; i++) { var item:Item = itemArray[i]; setChildIndex(item, i); } }*/ } } package main { import flash.display.MovieClip; import flash.events.Event; public class Item extends MovieClip { public var angl:Number; static var radiusX:uint = 250; static var radiusY:uint = 75; private var centerX:Number = 400; private var centerY:Number = 300; private var speed:Number = 0.05; public function Item() { masker.cacheAsBitmap = reflection.cacheAsBitmap = true; reflection.mask = masker; addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(event:Event):void { x = Math.cos(angl) * radiusX + centerX; y = Math.sin(angl) * radiusY + centerY; var scale:Number = y / (centerY + radiusY); scaleX = scaleY = scale; angl += speed; speed = (stage.mouseX - centerX) / 6000; //Нужно как-то сюда, чтобы работало //sortBySize(); } } } |
|
|||||
возможным решением данно проблемы было бы передача в каждый итем ссылок на соседние итемы, и чтоб этот итем просто менялся с ними глубинами или уровнями как сказать правильно не знаю, при определенных условиях, а именно на крайних(с права и слева) точках!
|
|
|||||
Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
|
Нашлось время и я опять взялся за карусельку.
Итак, увидел красивую карусельку с подсказками (AS1/AS2), захотел, сделал, но. Но вот у меня компилируется и работает роде как надо, но каждый кадр выдает ошибку, дебаг мод показал в каких строчках: TypeError: Error #1009: Cannot access a property or method of a null object reference. at main::Carousel/main:Carousel::moveTip()[D:\Works\Flash\Nika\Learn AS3\Carousel\MyCarousel\main\Carousel.as:94] at main::Carousel/main:Carousel::enterFrameHandler()[D:\Works\Flash\Nika\Learn AS3\Carousel\MyCarousel\main\Carousel.as:56] Вот main.Carousel.as: package main { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; public class Carousel extends MovieClip { private var numOfItems:uint = 10; static var radiusX:uint = 250; static var radiusY:uint = 75; private var centerX:Number = stage.stageWidth/2; private var centerY:Number = stage.stageHeight/2; private var speed:Number = 0.05; private var itemArray:Array = new Array; private var tooltip:MovieClip = new tip; private var rollOverTarget:MovieClip; private var itemTextM:itemTextMovie = new itemTextMovie(); private var myXML:XML = <info> <itemm tooltip="0" /> <itemm tooltip="1" /> <itemm tooltip="2" /> <itemm tooltip="3" /> <itemm tooltip="4"/> <itemm tooltip="5" /> <itemm tooltip="6" /> <itemm tooltip="7" /> <itemm tooltip="8" /> <itemm tooltip="9" /> </info>; public function Carousel() { for (var i:uint = 0; i < numOfItems; i++) { var item:Item = new Item(); item.angl = i * ((Math.PI * 2) / numOfItems); item.toolText = myXML.itemm[i].@tooltip; item.masker.cacheAsBitmap = item.reflection.cacheAsBitmap = true; item.reflection.mask = item.masker; itemArray.push(item); addChild(item); item.addEventListener(Event.ENTER_FRAME, enterFrameHandler); item.icon.addEventListener(MouseEvent.CLICK, clickHandler); item.icon.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler); item.icon.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler); buttonBack.buttonMode = false; buttonBack.alpha = 0; buttonBack.addEventListener(MouseEvent.CLICK, newCarousel); } } private function enterFrameHandler(event:Event):void { event.target.x = Math.cos(event.target.angl) * radiusX + centerX; event.target.y = Math.sin(event.target.angl) * radiusY + centerY; var scale:Number = event.target.y / (centerY + radiusY); event.target.scaleX = event.target.scaleY = scale; event.target.angl += speed; speed = (mouseX - centerX) / 6000; sortBySize(); moveTip(); } private function sortBySize():void { itemArray.sortOn("scaleX", Array.DESCENDING | Array.NUMERIC); itemArray.reverse(); for(var i:uint = 0; i < itemArray.length; i++) { var item:Item = itemArray[i]; setChildIndex(item, i); } } private function clickHandler(event:MouseEvent):void { for(var i:uint = 0; i < itemArray.length; i++) { var item:Item = itemArray[i]; item.removeEventListener(Event.ENTER_FRAME, enterFrameHandler); item.icon.removeEventListener(MouseEvent.CLICK, clickHandler); item.icon.removeEventListener(MouseEvent.ROLL_OVER, rollOverHandler); item.icon.removeEventListener(MouseEvent.ROLL_OUT, rollOutHandler); removeChild(item); } removeChild(tooltip); itemTextM.x = centerX; itemTextM.y = centerY; itemTextM.itemText.text = rollOverTarget.toolText; addChild(itemTextM); buttonBack.buttonMode = true; buttonBack.alpha = 1; } private function rollOverHandler(event:MouseEvent):void { addChild(tooltip); tooltip.tipText.text = event.target.parent.toolText; tooltip.x = event.target.parent.x; tooltip.y = event.target.parent.y - event.target.parent.height/2; rollOverTarget = event.target.parent; } private function rollOutHandler(event:MouseEvent):void { removeChild(tooltip); } private function moveTip():void { tooltip.x = rollOverTarget.x; tooltip.y = rollOverTarget.y - rollOverTarget.height/2; } private function newCarousel(event:MouseEvent):void { for(var i:uint = 0; i < itemArray.length; i++) { var item:Item = itemArray[i]; addChild(item); item.addEventListener(Event.ENTER_FRAME, enterFrameHandler); item.icon.addEventListener(MouseEvent.CLICK, clickHandler); item.icon.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler); item.icon.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler); } removeChild(itemTextM); buttonBack.buttonMode = false; buttonBack.alpha = 0; } } } package main { import flash.display.MovieClip; public class Item extends MovieClip { public var angl:Number; public var toolText; public function Item() { } } } Может кто поймет что я хотел обьяснить и поможет, надеюсь... Но спасибо что и так уже много помогли, надеюсь это не конец вашей милости. Вот проект: Последний раз редактировалось N1ka; 15.07.2008 в 13:26. |
|
|||||
сорри поторопился с выводом!
Последний раз редактировалось ramshteks; 15.07.2008 в 13:50. |
|
|||||
|
Часовой пояс GMT +4, время: 12:04. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|