⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scenechangeeffectinstance.as.svn-base

📁 Flex3实现的掼蛋游戏
💻 SVN-BASE
字号:
 /**
  * Project: 用以过场转换的自定义效果 效果实例类
  * 原库类为 com.oreilly.programmingflex.effects 此处引用略有修改
  * Author : dmh2002 Blog:http://dmh2002.com/
  * QQ:122054933 MSN:shangxinyu2002@msn.com 
  * Date : 2008.04.05 
  */   
package com.dmh2002.games.cardgame.effects 
{
	import com.dmh2002.games.cardgame.cairngorm.model.CardGameModelLoactor;
	
	import flash.display.Sprite;
	
	import mx.core.Application;
	import mx.core.UIComponent;
	import mx.effects.Tween;
	import mx.effects.effectClasses.TweenEffectInstance;
	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.materials.*;
	import org.papervision3d.objects.Cube;
	import org.papervision3d.scenes.Scene3D;
	
	public class SceneChangeEffectInstance extends TweenEffectInstance 
	{				
		[Bindable]
		private var _model:CardGameModelLoactor = CardGameModelLoactor.getInstance()
		
		/** 定义属性  此处属性大致与生成类中相同*/	
		private var _toX:Number;
		private var _toY:Number;
		private var _toWidth:Number;
		private var _toHeight:Number;
		private var _toComp:UIComponent;
		
		/** 定义属性  此处为使用PV3D时需要用到的库类实例*/	
		private var container:Sprite;
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var cube:Cube;
		private var materialForm:MovieMaterial;
		private var materialTo:MovieMaterial;
		private var ml:MaterialsList;
		
		/** get/set 存储器 */
		public function set toX(value:Number):void 
		{
			_toX = value;
		}		
		public function set toY(value:Number):void 
		{
			_toY = value;
		}		
		public function set toWidth(value:Number):void 
		{
			_toWidth = value;
		}		
		public function set toHeight(value:Number):void 
		{
			_toHeight = value;
		}		
		public function set toComp(value:UIComponent):void 
		{
			_toComp = value;
		}
		
		/** 构造函数 
		 * 继承EffectInstance必须定义的方法
		 * 必须调用super()方法来调用父类的构造函数
		 * 并且必须接收一个参数来指定目标对象
		 */
		public function SceneChangeEffectInstance(newTarget:Object)
		{
			super(newTarget);
		}
		
		/** play()方法 
		 * 继承EffectInstance必须定义的方法
		 * 控制动画的播放
		 * 覆盖的函数体中必须执行super.play()
		 */
		override public function play():void 
		{			
			_toX = _toComp.x;
			_toY = _toComp.y;
			_toWidth = _toComp.width;
			_toHeight = _toComp.height;
			
			super.play();
			
			//构建3D效果
			drawShape();
			
			target.visible = false;
			 
			var wScaleRate:Number = _toWidth / target.width;
			var hScaleRate:Number = _toHeight / target.height;
			var oldX:Number = target.x + target.width * .5;
			var oldY:Number = target.y + target.height * .5;
			var newX:Number = _toComp.x + _toComp.width * .5;
			var newY:Number = _toComp.y + _toComp.height * .5;
			new Tween(this,[0,1,1,oldX,oldY],[360,wScaleRate,hScaleRate,newX,newY],duration);
		}
		
		/** onTweenUpdate()方法 
		 * 继承TweenEffectInstance必须定义的方法
		 * 该函数在动画播放过程中,会被反复调用。
		 */
		override public function onTweenUpdate(value:Object):void
		{
			cube.rotationX = Number(value[0]);
			cube.rotationY = Number(value[0])/2;
			container.x = Number(value[3]);
			container.y = Number(value[4]);
			cube.scaleX = Number(value[1]);
			cube.scaleY = Number(value[2]);
						
			scene.renderCamera(camera);
		}
		
		/** onTweenEnd()方法 
		 * 如果继承TweenEffectInstance才可以覆盖此方法
		 * 在函数体中必须调用super.onTweenEnd()
		 * 改函数在动画播放结束时会被调用
		 */
		override public function onTweenEnd(value:Object):void 
		{
			super.onTweenEnd(value);

			_toComp.visible = true;

			_model.cardGame_Application.rawChildren.removeChild(container);
			
			_model.cardGame_Application.layout = "vertical"; 

			//_model.cardGame_Application.removeChild(_model.cardGame_Application.getChildByName(target.name))
			
		}
		
		/** 动画执行时使用的一个方法
		 * 构建3D效果
		 **/
		private function drawShape():void
		{
			//创建3D舞台的容器
			container = new Sprite();
			container.x = target.x + target.width * .5;
			container.y = target.y + target.height * .5;
			
			//创建3D舞台,并将容器_container 作为参数传入
			scene = new Scene3D(container);
			
			//我们需要在舞台上放一个摄像头,他代表我们的眼睛,他能看到的就是你看到的。
			camera = new Camera3D();
			camera.z = 400*1.05;
			camera.zoom = 5;
			
			//mc材质,当前对象
			materialForm = new MovieMaterial(UIComponent(target),true,false);
			
			//mc材质,需要转换的对象
			materialTo = new MovieMaterial(UIComponent(_toComp),true,true);
			
			//颜色材质,立方体其它面
			var sideMat:ColorMaterial = new ColorMaterial(0xffffff);
			
			//材质列表,用于定义6个面的材质
			ml = new MaterialsList();
			ml.addMaterial(materialForm,"front");
			ml.addMaterial(materialTo,"back");
			ml.addMaterial(sideMat,"right");
			ml.addMaterial(sideMat,"left");
			ml.addMaterial(sideMat,"top");
			ml.addMaterial(sideMat,"bottom");
			
			//创建立方体 材质列表、宽度、深度、高度
			cube = new Cube(ml,target.width,30,target.height)//new Cube(ml,target.width,30,target.height);
			
			//把显示对象添加到舞台
			scene.addChild(cube);
			
			//添加舞台容器
			_model.cardGame_Application.rawChildren.addChild(container);
			//target.parent.rawChildren.addChild(container);
			
			//把摄像头看到的显示出来
			scene.renderCamera(camera);
		}
		
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -