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

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

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от ramshteks Посмотреть сообщение
честно говоря проблемы не увидел! все вроде норм...

Слушай хочешь бесплатный совет! он тебе потом оч поможет)
Крутишь медленно карусель так чтобы самый правый итем (который там был со старта) стал прямо по средине (так легче заметить), и вот дергаешь мышкой так чтобы карусель то в одну, то в другую сторону дергалась, и вот тогда заметишь как только этот итем будет не по средине между двумя, а заноситься немного ближе к одному, то к другому соседнему, но потом ставать всеравно на место.

А совет да еще и даром... Хочу!


Последний раз редактировалось N1ka; 04.07.2008 в 21:10.
Старый 04.07.2008, 21:10
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 32  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
Почитай про ооп. Ты не используешь потенциала этой прекрасной вещи )

зачем ты заставляешь сторонний класс полностью осуществлять работу другого, это просто напросто нарушает все принципы ооп.

если есть вещи которые должны упрявляться из вне создается интерфейс, для доступа к данным класса используются сеттеры и геттеры, для чего тебе методы?)
настоятельно рекомендую изучить три главных столпа ооп: наследование, полиморфизм и инкапсуляция

Я ручаюсь что тебе это пригодится)

а так получается что ты чуть ли не на первом скрипте кодишь... не гут это

Старый 04.07.2008, 21:16
N1ka вне форума Посмотреть профиль Отправить личное сообщение для N1ka Найти все сообщения от N1ka
  № 33  
Ответить с цитированием
N1ka
 
Аватар для N1ka

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от ramshteks Посмотреть сообщение
Почитай про ооп. Ты не используешь потенциала этой прекрасной вещи )

зачем ты заставляешь сторонний класс полностью осуществлять работу другого, это просто напросто нарушает все принципы ооп.

если есть вещи которые должны упрявляться из вне создается интерфейс, для доступа к данным класса используются сеттеры и геттеры, для чего тебе методы?)
настоятельно рекомендую изучить три главных столпа ооп: наследование, полиморфизм и инкапсуляция

Я ручаюсь что тебе это пригодится)

а так получается что ты чуть ли не на первом скрипте кодишь... не гут это
Когда-то учил ООП, но я немного прогульщиком был, а учительница молодая и тоже прогульщица, так что вот результат.

А так, спасибо за совет, попробою сделать как советуешь, и возможно немного код переделать по законам ООП и тогда может и эта проблема с одним итемом пропадет.

Старый 04.07.2008, 21:20
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 34  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
советую почитать книгу макконела называется "Совершенный код"

хорошая книга для программиста на любом языке, есть про все)
твой код станет гораздо лучше)

Старый 04.07.2008, 21:24
N1ka вне форума Посмотреть профиль Отправить личное сообщение для N1ka Найти все сообщения от N1ka
  № 35  
Ответить с цитированием
N1ka
 
Аватар для N1ka

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Спасибо.

Старый 09.07.2008, 13:30
N1ka вне форума Посмотреть профиль Отправить личное сообщение для N1ka Найти все сообщения от N1ka
  № 36  
Ответить с цитированием
N1ka
 
Аватар для N1ka

Регистрация: 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);
			}
		}*/
	}
}
main.Item
Код:
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();
		}
	}
}
Ну и еще второй вопрос: как в main.Item найти stage.stageWidth и stage.stageHeight?

Старый 09.07.2008, 14:56
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 37  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
возможным решением данно проблемы было бы передача в каждый итем ссылок на соседние итемы, и чтоб этот итем просто менялся с ними глубинами или уровнями как сказать правильно не знаю, при определенных условиях, а именно на крайних(с права и слева) точках!

Старый 15.07.2008, 13:21
N1ka вне форума Посмотреть профиль Отправить личное сообщение для N1ka Найти все сообщения от N1ka
  № 38  
Ответить с цитированием
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 Кб, 100 просмотров)


Последний раз редактировалось N1ka; 15.07.2008 в 13:26.
Старый 15.07.2008, 13:46
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 39  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
сорри поторопился с выводом!


Последний раз редактировалось ramshteks; 15.07.2008 в 13:50.
Старый 15.07.2008, 13:53
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 40  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
вот так должна выглядеть 14ая строка

Код:
private var rollOverTarget:MovieClip=new Item;

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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