Как загрузить приложение Papervision / Flex (SWF) в качестве материала на плоскость Papervision? - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь создать портфельное приложение, подобное используемому 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, остается в правильном положении, но сфера papervision (которая вращается) находится в неправильном месте.Я что-то упускаю здесь?

Sphere Plane

1 Ответ

0 голосов
/ 24 марта 2011

Человек. Я давно не видел этот сайт. Еще один из кулеров PV проектов ...

Что вы подразумеваете под:

Я не могу правильно увидеть сцену, отрисованную в Papervision

Вы говорите, что можете видеть компоненты в их соответствующих положениях, например: у вас есть плоскость с загрузкой файла, которая выглядит как предполагаемая? Но я предполагаю, что вы не можете взаимодействовать с ним.

Насколько я знаю, и я потратил достаточное количество времени, пытаясь сделать что-то похожее, MovieMaterial (который, я полагаю, вы используете) рисует растровое изображение любого содержимого, существующего в вашем MovieClip, и, если Вы устанавливаете его в animated = true, тогда он будет отображать серию растровых изображений - приравнивая анимацию. То, что он не делает, это отображение фактического MovieClip (или SWF) на плоскости. Таким образом, вы можете увидеть ваши компоненты, но вот как:

MovieMaterial.as line 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 имел доступ к реальным SWF-файлам как материалу, но это изменилось в 2.0. К сожалению. Надеюсь, что Молехилл будет.

ура

...