?? 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 + -