0

我在Papervision3D中遇到了ScrollPane組件的主要問題。這個問題已經提出來了,在幾個不同的論壇,但沒有解決:Papervision3D中的ScrollPane

我試圖動態創建一個ScrollPane,以及拖動一個走上舞臺並且在添加到PaperVision3D環境中的MovieClip時,它總是以其默認大小(100,100)顯示。我甚至無法讓Tween來處理它的大小。

回答

1

好的,在這裏。

我試圖讓它與MovieAssetMaterial一起工作,沒有運氣。 如果我跟蹤MovieAssetMaterial中的舞臺,舞臺爲空,我猜這就是爲什麼scrollpane不能正常工作。這是一個容器,因此它需要舞臺來正確設置自己。

我已經設法在papervision平面上獲得200x200的滾動窗格,並且有一些變通辦法可以交互。這裏是我的代碼:

package{ 

    import org.papervision3d.*; 
    import org.papervision3d.view.*; 
    import org.papervision3d.cameras.*; 
    import org.papervision3d.materials.*; 
    import org.papervision3d.objects.*; 
    import org.papervision3d.objects.primitives.*; 
    import org.papervision3d.scenes.*; 
    import org.papervision3d.render.*; 

    import flash.display.*; 
    import flash.events.*; 

    import fl.controls.*; 
    import fl.containers.*; 

    public class PV3DScrollPane extends MovieClip{ 

     private var viewport:Viewport3D; 
     private var camera:Camera3D; 
     private var scene:Scene3D; 
     private var renderer:BasicRenderEngine; 
     private var plane:Plane; 

     public function PV3DScrollPane(){ 
      init3D(); 
     } 

     private function init3D():void 
     {  
      //setup 3d 
      viewport = new Viewport3D(1024, 768, false, true); 
      addChild(viewport); 
      camera = new Camera3D(); 
      camera.z = -500; 
      camera.zoom = 1; 
      camera.focus = 500; 
      camera.target = DisplayObject3D.ZERO; 
      scene = new Scene3D(); 
      renderer = new BasicRenderEngine(); 
      //setup plane 
      plane = makePlane(); 
      stage.addEventListener(Event.ENTER_FRAME, loop); 
     } 

     public function makePlane():Plane 
     { 
      //setup scroll pane 
      var sp:ScrollPane = new ScrollPane(); 
      addChild(sp); 
      sp.x = 1000;//hide it off stage, visible doesn't help much 
      sp.source = 'http://www.helpexamples.com/flash/images/image1.jpg'; 
      sp.setSize(200, 200); 
      //setup material & plane 
      var mat:MovieMaterial = new MovieMaterial(sp, false, true, false); 
      mat.interactive = true; 
      var plane:Plane = new Plane(mat, 0, 0, 10, 10); 
      scene.addChild(plane); 
      return plane; 
     } 

     private function loop(evt:Event):void 
     { 
       //plane.rotationY++; 
       renderer.renderScene(scene, camera, viewport); 
     } 
    } 
} 

而且解釋: 我使用BasicView試過,但讓我使用了一個創建場景,相機,渲染和視口的老校友方式我不能得到相同的結果。 由於ScrollPane需要舞臺,我已經將它添加到舞臺上,然後設置其大小。 我使用ScrollPane創建了MovieMaterial,並將其交互設置爲true。 我已經通過放棄舞臺「隱藏」了組件。可見設置爲false讓我回到100x100的問題。

我google有點因爲我記得UI組件用於與papervision工作。那是的,他們使用工作。 Here是我記得的帖子。 Blitz Agency也有類似的帖子。如果你是Google的話,你可以找到InteractiveMovieMaterial.as,但它不適用於當前的papervision版本,因爲沒有drawFace3D方法了,事情已經發生了一些變化。在我做了修復後,我發現了一個更新的(2008)blog post on John Grden's website關於這個問題。這種方法有相似之處,但我沒有經歷所有這些麻煩。

希望這會有所幫助!

+0

謝謝! John Grden的這篇文章確實有幫助。 –

+0

酷!很高興你把它整理一下。我討厭什麼時候事情不起作用,這不是你自己的錯:) –