Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 15.07.2008, 13:21
N1ka вне форума Посмотреть профиль Отправить личное сообщение для N1ka Найти все сообщения от N1ka
  № 30  
Ответить с цитированием
N1ka
 
Аватар для N1ka

Регистрация: 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;
		}
	}
}
main.Item.as:
Код:
package main {
	import flash.display.MovieClip;
	public class Item extends MovieClip {
		public var angl:Number;
		public var toolText;
		public function Item() {
		}
	}
}
И еще. Я постами выше говорил за глюк что заметил только я, что один итем не такой как все, он не твердо стоит на своем месте, а плавает туда-сюда. Итак, благодаря сделанным подсказкам я смогу показать этот итем и вам. Итак, над каждым итемом при наведении мыши появляется подсказка с номером от 0 до 9. Тот самый итем что выделяется под номером "0", т.е. как только запустить мувик с каруселью и поводить мышью по итемах, то попробуйте найти итем под номером "0" и тогда смотрите на него и дводите мышью так чтобы карусель крутилась то в одну то в другую сторону, и тогда увидите как этот итем будет заносить, он будет отставать немного от движения. Хотелось бы чтобы и здесь исправить, этого глюка нет когда писать весь код в кадре, и его нет когда писать немного кода в main.Carousel.as и немного в main.Item.as, но у меня так не получается. А сейчас почти весь код в main.Carousel.as. И кстати, я реализовал нажатие на итемы, так когда нажать на любой итем и потом вернуться назад к карусели, то уже этот глючный итем что был под номером "0", он уже не будет под этим номером.

Может кто поймет что я хотел обьяснить и поможет, надеюсь... Но спасибо что и так уже много помогли, надеюсь это не конец вашей милости.

Вот проект:
Вложения
Тип файла: rar MyCarousel.rar (27.2 Кб, 106 просмотров)


Последний раз редактировалось N1ka; 15.07.2008 в 13:26.
Создать новую тему   Часовой пояс GMT +4, время: 00:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.