![]() |
|
||||||||||
|
|||||
|
Регистрация: 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, время: 02:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|