0

我正在尝试构建一个类似于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 球体(正在旋转)在错误的位置。我在这里缺少什么吗?

领域 飞机

4

1 回答 1

0

男人。我有一段时间没看到那个网站了。仍然是更酷的光伏项目之一……

你是什​​么意思:

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

您说您可以在适当的位置看到组件,例如:您有一架飞机,看起来像预期的文件正在加载?但我猜你不能与之交互。

据我所知,我已经花费了相当多的时间来尝试做类似的工作,MovieMaterial(我假设你正在使用)绘制你的 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 中发生了变化。可悲的是。希望摩尔希尔会。

干杯

于 2011-03-24T15:07:55.280 回答