代码之家  ›  专栏  ›  技术社区  ›  Jeremy White

PaperVision3D中的滚动窗格

  •  0
  • Jeremy White  · 技术社区  · 15 年前

    PaperVision3D中的滚动窗格组件存在主要问题。此问题在几个不同的论坛中提出,但没有解决:

    我尝试动态创建滚动窗格,并将其拖到舞台上,当添加到PaperVision3D环境中的movieclip时,它始终以默认大小(100100)显示。我甚至连一个花呢都找不到。

    1 回复  |  直到 14 年前
        1
  •  1
  •   George Profenza    15 年前

    好的,来吧。

    我试着让它和电影素材一起工作,没有运气。 如果我跟踪一个电影素材中的舞台,这个舞台是空的,我猜这就是滚动窗格不能正常工作的原因。它是一个容器,因此需要适当地设置阶段。

    我已经在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,但是我不能得到相同的结果,所以我使用了传统的方法来创建场景、相机、渲染和视区。 由于滚动窗格需要阶段,我已经将其添加到阶段,然后设置其大小。 我使用滚动窗格创建了一个电影材料,并将其交互性设置为true。 我把这个部件放在舞台下“隐藏”了。将visible设置为false使我回到100x100问题。

    我对谷歌有点了解,因为我记得以前使用Papervision的用户界面组件。没错,他们 习惯于 工作。 Here 是我记得的那个职位。 Blitz Agency 以前也有类似的帖子。你可以找到互动电影材料。就像你用谷歌搜索它一样,但它不适用于当前的Papervision版本,因为不再有DrawFace3D方法,事情发生了一些变化。在我做了修复之后,我发现了一个更新的(2008年) blog post on John Grden's website 关于这个问题。这种方法有相似之处,但我还没有经历所有的麻烦。

    希望这有帮助!