這裏沒有重新new 材質material 而是通過改變貼圖 texture 來實現
demo :http://56589.5c5c.info/swf/Face.swf
簡單原型 :
/**
*
*
*
* Back Front 爲兩個MovieClip
*
*
*//
package {
import fl.motion.easing.Back;
import flash.display.MovieClip;
import flash.display.Sprite;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.view.BasicView;
import org.papervision3d.materials.utils.BitmapMaterialTools
import flash.events.Event
import flash.display.BitmapData;
public class Test extends BasicView {
private var bfSp:BFSprite;
private var plane:Plane
private var material:MovieMaterial
public function Test() {
// constructor code
stage.frameRate = 40;
init()
startRendering()
}
private function init():void {
createPlane();
}
private function createPlane():void {
var front:Sprite = new Front();
var back:Sprite = new Back()
back.x=0
back.y=back.height
back.rotationX=180 //這裏的原因可以看 http://blog.csdn.net/hu36978/archive/2010/05/08/5569710.aspx
var bBack:Sprite= new Sprite()
bBack.addChild(back)
bfSp = new BFSprite();
bfSp.front.addChild(front);
bfSp.back.addChild(bBack);
material= new MovieMaterial(bfSp,false);
trace("movie爲"+material.movie)
trace("材質爲:"+material.texture)
material.doubleSided=true
plane = new Plane(material,400,300,2,2);
this.scene.addChild(plane);
}
override protected function onRenderTick(e:Event=null):void
{
super.onRenderTick();
plane.rotationX += 2
var material:MovieMaterial = MovieMaterial(plane.material)
material.animated=true
var sp:BFSprite = BFSprite(material.texture)
if ((plane.rotationX%360 > 90) && (plane.rotationX%360 < 270)) {
if (sp.container.getChildByName(sp.front.name)) {
// 顯示back
sp.container.removeChildAt(0)
sp.container.addChild(sp.back);
}
}
else
{
if(sp.container.getChildByName(sp.back.name)){
//顯示front
sp.container.removeChildAt(0)
sp.container.addChild(sp.front);
}
}
}
}
}
BFSprite 類::控制2個 MC 當然這裏你可以擴展用來實現控制多個
/*
*
* 雙面 用於pv3d 主要是通過索引顯示
*
*
* */
package {
import flash.display.Sprite;
public class BFSprite extends Sprite {
public var front:Sprite
public var back:Sprite;
public var container:Sprite
public function BFSprite() {
// constructor code
init()
}
private function init():void {
//front back 的容器
container = new Sprite();
// container.width = this.width
// container.height=this.height
this.addChild(container);
container.name="container"
//front 正面
front = new Sprite()
front.name = "front";
//front.width = this.width;
// front.height = this.height
container.addChild(front);
//反面
back = new Sprite()
back.name = "back";
//back.width = this.width
// back.height = this.height
// container.addChild(back);
trace("Create");
}
}
}