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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.03.2011, 14:47
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 1  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
По умолчанию Помогите с Tween

Вот забрёл я на сайт, посмотрел, понравилось. Впроде как ничего тяжёлого решил повторить. Но столкнулся с проблемой - я начинаю осуществлять tween когда у меня двигается мышка. И вот если я вначале резко дёргаю мышкой, а потом замедляю но не останавливаю получается убожество. Мне интересно как это хоть примерно реализовано на том сайте. Вот то что я сделал:
Код AS3:
package
{
	import away3d.cameras.HoverCamera3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.core.render.Renderer;
	import away3d.events.MouseEvent3D;
	import away3d.materials.ColorMaterial;
	import away3d.materials.MovieMaterial;
	import away3d.primitives.Cube;
	import away3d.primitives.data.CubeMaterialsData;
 
	import caurina.transitions.Tweener;
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	[SWF(width="800", height="600", frameRate="60", backgroundColor="0xFFFFFF", quality="high")]
	public class Menu_3D extends Sprite
	{
		private static const MENU_ITEM_WIDTH:int=200;
		private static const MENU_ITEM_HEIGHT:int=25;
		private static const MENU_ITEM_DEPTH:int=300;
		private static const MENU_ITEM_DISTANCE:int=4;
 
		private var _scene:Scene3D;
		private var _view:View3D;
		private var _cam:HoverCamera3D;
 
		private var mat:ColorMaterial=new ColorMaterial(0x999999);
		private var cubeData:CubeMaterialsData=new CubeMaterialsData({left:'black', right:mat, top:'black', bottom:'black', back:'black'});
 
		private var _xmlMenu:XML;
 
		private var _menuContainers:Array=new Array();
		private var mousePositionX:int;
 
		public function Menu_3D()
		{
			createXML();
 
			init3d();
 
			createMenu();
 
			addListeners();
		}
 
 
 
		private function createXML():void
		{
			_xmlMenu=<Menu>
						<item name="О компании">
						</item>
 
 
 
						<item name="Новости">
						</item>
 
 
 
						<item name="Продукция">
							<subItem name="Новинки">
							</subItem>
 
							<subItem name="Изделия">
							</subItem>
 
							<subItem name="Материалы">
							</subItem>
						</item>
 
 
 
						<item name="Портфолио">
						</item>
 
 
 
						<item name="Реклама">
							<subItem name="Каталог">
							</subItem>
 
							<subItem name="Брошюры">
							</subItem>
 
							<subItem name="Демоматериалы">
							</subItem>
 
							<subItem name="Презентации">
							</subItem>
						</item>
 
 
 
						<item name="Техподдержка">
							<subItem name="Инструкции">
							</subItem>
 
							<subItem name="Схемы подключения">
							</subItem>
 
							<subItem name="Вводимые в производство">
							</subItem>
 
							<subItem name="Снимаемые с производства">
							</subItem>
						</item>
 
 
 
						<item name="Для дизайнеров">
							<subItem name="Конкурс 2008-2009">
							</subItem>
 
							<subItem name="GIRAклы Украины">
							</subItem>
						</item>
 
 
 
						<item name="Для дилеров">
							<subItem name="Остатки">
							</subItem>
 
							<subItem name="Поставки">
							</subItem>
 
							<subItem name="Доп информация">
							</subItem>
						</item>
 
 
 
						<item name="Дилеры">
						</item>
 
 
 
						<item name="Контакты">
						</item>
					 </Menu>;
		}
 
 
 
		private function init3d():void
		{
			_scene=new Scene3D();
 
			_cam=new HoverCamera3D();
 
			_view=new View3D({scene:_scene, view:_view, camera:_cam, x:stage.stageWidth/2, y:stage.stageHeight/2, stats:true});
			_view.renderer = Renderer.CORRECT_Z_ORDER;
			addChild(_view);
		}
 
 
 
		private function createMenu():void
		{
			for (var i:int=0; i<_xmlMenu.descendants("item").length(); i++)
			{
				var s:String=_xmlMenu.descendants("item")[i].attribute("name");
				var b:Boolean=false;
				if (_xmlMenu.descendants("item")[i].elements().length()>0) { b=true; }
				_menuContainers[i]=new Cube({faces:cubeData});
				_menuContainers[i].width=MENU_ITEM_WIDTH;
				_menuContainers[i].height=MENU_ITEM_HEIGHT;
				_menuContainers[i].depth=MENU_ITEM_DEPTH;
				_menuContainers[i].y=(_xmlMenu.descendants("item").length()/2)*(MENU_ITEM_HEIGHT)-(i*(MENU_ITEM_HEIGHT+MENU_ITEM_DISTANCE));
				_menuContainers[i].material=new MovieMaterial(new ItemTexture(s, b), {smooth:true, precision:5, interactive:false});
				_view.scene.addChild(_menuContainers[i]);
			}
		}
 
 
 
		private function addListeners():void
		{
			stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
 
 
		private function mouseMoveHandler(evt:MouseEvent):void
		{
			//Tweener.removeAllTweens();
			for(var i:int=0; i<_menuContainers.length; i++)
			{
				var t:Number=(0.2+(i*0.04));
 
				Tweener.addTween(_menuContainers[i], {rotationY:mousePositionX, time:t, transition:"easeInOutSine"});
			}
		}
 
 
 
		private function onEnterFrame(e:Event):void
		{
			if (mouseX<stage.stageWidth/2)
			{
				mousePositionX=0;
				_cam.targetpanangle=0;
			}
			else
			{
				_cam.targetpanangle=-((mouseX-(stage.stageWidth/2))*0.03);
				mousePositionX=((mouseX-(stage.stageWidth/2))*0.07);
			}
 
			_cam.targettiltangle=-((mouseY-(stage.stageHeight/2))*0.05);
 
			_cam.hover();
			_view.render();
		}
	}
}

Исходник и откомпиленая флешка в архиве в прикреплённом файле.
Вложения
Тип файла: zip Menu_3D.zip (138.4 Кб, 30 просмотров)

Старый 17.03.2011, 20:15
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 2  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
easeInOutSine -> easeOutSine и размышлять

Старый 17.03.2011, 20:59
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 3  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
всё заработало, но почему так посижу подумаю, спасибо большое.

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

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

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


 


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


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