2011-02-12 52 views
0

這段代碼可以工作,但它確實將第一個代碼顯示爲多維數據集,而視圖,縮放和交互性不同,所以我希望多維數據集可以顯示爲具有相同特徵的第一個代碼。我如何使這個papervision3d代碼工作?

第一代碼是在這裏:http://papervision2.com/10-advanced-interactivity/

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.text.TextField; 
    import org.papervision3d.materials.ColorMaterial; 
    import org.papervision3d.materials.MovieMaterial; 
    import org.papervision3d.materials.utils.MaterialsList; 
    import org.papervision3d.objects.primitives.Cube; 
    import org.papervision3d.view.BasicView; 

    public class Main extends BasicView 
    { 
     protected var cube:Cube; 
     protected var interactiveMats:Array; 
     protected var materialsList:MaterialsList; 
     protected var targetrotationX:Number; 
     protected var targetrotationY:Number; 
     protected var targetrotationZ:Number; 
     protected var tweening:Boolean; 

     public function Main():void 
     { 
      super(); 
      init(); 
     } 
     protected function init():void 
     { 
      createChildren(); 
      startRendering(); 
     } 
     protected function createChildren():void 
     { 
      //Set the viewport to interactive 
      viewport.interactive = true; 

      //Create Materials: 
      materialsList   = new MaterialsList(); 
      interactiveMats   = ["front", "back", "left", "right", "bottom", "top"]; 
      var colorsArray:Array = [0x76b6f8, 0x4291e1, 0x1f73c8, 0xe77111, 0xe8914c, 0xfad2b2]; 

      for (var i:int = 0; i < interactiveMats.length; i++) 
      { 
       //Create a color box so we can use our MouseEvents 
       var colorBox:Sprite = new Sprite(); 
       colorBox.graphics.beginFill(colorsArray[i]); 
       colorBox.graphics.drawRect(0, 0, 100, 100); 
       colorBox.graphics.endFill(); 
       colorBox.name = interactiveMats[i]; 

       //Add a textField for reference 
       var textField:TextField = new TextField() 
       colorBox.addChild(textField) 
       textField.text = interactiveMats[i]; 

       //Add a MouseEvent to the Sprite 
       colorBox.mouseChildren = false; 
       colorBox.addEventListener(MouseEvent.CLICK, onMovieMatClicked); 

       //Create the MovieMat 
       var movieMat:MovieMaterial  = new MovieMaterial(colorBox, true, true); 
       movieMat.interactive   = true; 
       movieMat.smooth     = true; 
       materialsList.addMaterial(movieMat, interactiveMats[i]); 
      } 

      //Create Cube 
      cube = new Cube(materialsList, 100, 100, 100); 

      //Add cube to the scene 
      scene.addChild(cube); 
     } 

     protected function onMovieMatClicked(evt:MouseEvent):void 
     { 
      if (tweening) 
      { 
       // Let it rotate again 
       tweening = false; 
      } 
      else 
      { 
       switch(evt.target.name) { 
        case "front": 
         targetrotationX = 0; 
         targetrotationY = 180; 
         targetrotationZ = 0; 
         tweening = true; 
        break; 
        case "back": 
         targetrotationX = 0; 
         targetrotationY = 0; 
         targetrotationZ = 0; 
         tweening = true; 
        break; 
        case "left": 
         targetrotationX = 0; 
         targetrotationY = -90; 
         targetrotationZ = 0; 
         tweening = true; 
        break; 
        case "right": 
         targetrotationX = 0; 
         targetrotationY = 90; 
         targetrotationZ = 0; 
         tweening = true; 
        break; 
        case "top": 
         targetrotationX = -90; 
         targetrotationY = 0; 
         targetrotationZ = 0; 
         tweening = true; 
        break; 
        case "bottom": 
         targetrotationX = 90; 
         targetrotationY = 0; 
         targetrotationZ = 180; 
         tweening = true; 
        break; 
       } 
      } 
     } 

     override protected function onRenderTick(event:Event = null):void 
     { 
      super.onRenderTick(event); 

      if (tweening) { 
       // If a face has been clicked 
       if (camera.zoom <230) { 
        // If the camera isn't zoomed enough then zoom in a bit more: 
        camera.zoom += Math.sqrt(230-camera.zoom)/5; 
       } 
       // Test each rotation and rotate it towards the target rotation: 
       // X axis: 
       if (cube.rotationX < targetrotationX) 
       { 
        cube.rotationX += Math.sqrt(targetrotationX-cube.rotationX); 
        cube.rotationX = Math.round(cube.rotationX); 
       } 
       else if (cube.rotationX > targetrotationX) 
       { 
        cube.rotationX -= Math.sqrt(cube.rotationX-targetrotationX); 
        cube.rotationX = Math.round(cube.rotationX); 
       } 

       // Y axis: 
       if (cube.rotationY < targetrotationY) 
       { 
        cube.rotationY += Math.sqrt(targetrotationY-cube.rotationY); 
        cube.rotationY = Math.round(cube.rotationY); 
       } 
       else if (cube.rotationY > targetrotationY) 
       { 
        cube.rotationY -= Math.sqrt(cube.rotationY-targetrotationY); 
        cube.rotationY = Math.round(cube.rotationY); 
       } 

       // Z axis: 
       if (cube.rotationZ < targetrotationZ) 
       { 
        cube.rotationZ += Math.sqrt(targetrotationZ-cube.rotationZ); 
        cube.rotationZ = Math.round(cube.rotationZ); 
       } 
       else if (cube.rotationZ > targetrotationZ) 
       { 
        cube.rotationZ -= Math.sqrt(cube.rotationZ-targetrotationZ); 
        cube.rotationZ = Math.round(cube.rotationZ); 
       } 
      } 
      else 
      { 
       // If the camera is zoomed in, it shouldn't be now 
       if (camera.zoom > 200) 
       { 
        // So zoom out a bit. 
        camera.zoom -= Math.sqrt(camera.zoom-2)/5; 
       } 
       // Rotate the cube a bit: 
       cube.rotationX += 2; 
       cube.rotationY += 2; 
       // Make sure that we dont "wind up" the rotation 
       if (cube.rotationX>= 360) cube.rotationX = 0; 
       if (cube.rotationY>= 360) cube.rotationY = 0; 
      } 
     }  
    } 
} 

碼2摘自:http://papervision2.com/advanced-interactivity/

回答

0

然而,文章提出,在解析<&lt;>&gt;

做一個發現/替換每個人和大部分的錯誤應該消失。

+0

嘿馬特做了,但它沒有工作,但我檢查了一些新的代碼已更新的代碼,你已經說過的代碼已經在代碼中做了修改,代碼確實有效,但是問題我不希望多維數據集有這種類型的交互性,我希望它能夠做它在第一個代碼中的作用,所以如果我們可以改變周圍的代碼,我可以嘗試它,但它沒有什麼作用,因爲我不是專家, as3,但大部分代碼是相同的,但更新,其定義的立方體,它的參數和材料,使其工作,將增加更新的代碼 – shkz 2011-02-12 22:09:52