![]() |
|
||||||||||
|
|||||
|
Регистрация: 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. |
![]() |
Часовой пояс GMT +4, время: 00:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|