📄 scenechangeeffectinstance.as.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 + -