如何在Papervision平面上加载Papervision / Flex应用程序(SWF)作为材料?

时间:2011-03-24 14:41:21

标签: actionscript-3 flex4 papervision3d

我正在尝试构建类似于Whitevoid使用的投资组合应用程序。我正在使用Flex 4和Papervision3D 2.除了一个问题外,我的一切都在工作。当我尝试在其中一个平面上加载外部SWF作为材质时,我可以在正确的位置看到任何本机Flex或Flash组件,但是papervision对象未正确呈现。看起来视口没有在嵌套的swf中设置。我已经发布了下载swf的代码。

private function loadMovie(path:String=""):void
{
    loader = new Loader();
    request = new URLRequest(path);

    loader.contentLoaderInfo.addEventListener(Event.INIT, addMaterial);

    loader.load(request);
}

private function addMaterial(e:Event):void
{
    movie = new MovieClip();
    movie.addChild(e.target.content);
    var width:Number = 0;
    var height:Number = 0;
    width = loader.contentLoaderInfo.width;
    height = loader.contentLoaderInfo.height;

    //calculate the aspect ratio of the swf
    var matAR:Number = width/height;

    if (matAR > aspectRatio)
    {
        plane.scaleY = aspectRatio / matAR;
    }
    else if (matAR < aspectRatio)
    {
        plane.scaleX = matAR / aspectRatio;
    }

    var mat:MovieMaterial = new MovieMaterial(movie, false, true, false, new Rectangle(0, 0, width, height));

    mat.interactive = true;
    mat.smooth = true;
    plane.material = mat;
}

下面我发了两张照片。第一个是自己运行的应用程序的镜头。第二个是作为平面上的MovieMaterial的应用程序。您可以看到在mxml中作为spark对象创建的按钮如何保持在正确的位置,但是papervision球体(正在旋转)位于错误的位置。我在这里缺少什么吗?

Sphere Plane

1 个答案:

答案 0 :(得分:0)

曼。我有一段时间没见过那个网站。仍然是较冷的光伏项目之一...

你是什么意思:

  

我无法正确看到Papervision中呈现的场景

您说您可以在适当的位置看到组件,例如:您的平面看起来像预期的文件加载?但我猜你不能与它互动。

据我所知,我花了相当多的时间尝试做类似的工作,MovieMaterial(我假设你正在使用)绘制了一个Bitmap,其中包含MovieClip中存在的任何内容,如果你将它设置为animated = true,然后它将渲染出一系列位图 - 等同于动画。它没有做的是在飞机上显示一个真实的MovieClip(或SWF)。所以你可能会看到你的组件,但这就是:

MovieMaterial.as第137行

// ______________________________________________________________________ CREATE BITMAP

        /**
        * 
        * @param    asset
        * @return
        */
        protected function createBitmapFromSprite( asset:DisplayObject ):BitmapData
        {
            // Set the new movie reference
            movie = asset;

            // initialize the bitmap since it's new
            initBitmap( movie );

            // Draw
            drawBitmap();

            // Call super.createBitmap to centralize the bitmap specific code.
            // Here only MovieClip specific code, all bitmap code (maxUVs, AUTO_MIP_MAP, correctBitmap) in BitmapMaterial.
            bitmap = super.createBitmap( bitmap );

            return bitmap;
        }

请注意,在WhiteVoid中,您实际上从未实际与电影交互,直到它“落地”=他很可能在位图纹理平面顶部的电影中交换。

您正在与之交互的部分可能是另一个拥有“按钮”的平面,该按钮在鼠标悬停时变得可见。

我认为PV1.0可以访问真正的swfs作为素材,但这在2.0中有所改变。可悲的是。希望Molehill会。

欢呼声