动态改变贴图(2)

来源:互联网 发布:diss大战 知乎 编辑:程序博客网 时间:2024/05/16 07:46

 这里没有重新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");
   
   
   
   
   }

 }
 
}

 

 

 

 

 

原创粉丝点击