加载的SWF上的3D变换不起作用

时间:2011-12-12 15:57:00

标签: actionscript-3 3d flash flash-cs5

以下是该方案:

我们的创意团队在Flash CS5创作工具中生成SWF动画,我们(工程师)在运行时将其加载到使用Flex SDK构建的项目中。不使用“3D旋转工具”的动画效果很好。

使用3D旋转工具的动画会产生以下行为:

  • 使用3D旋转工具应用3D补间的MovieClip显示在舞台的左上角,就好像它们根本没有变换一样(即好像他们的Matrix3D被忽略了,他们的Matrix是身份)< / LI>
  • 具有正常2D补间动画的MovieClip正确动画
  • 正确填充Alpha和其他非仿射属性

3D和非3D动画在浏览器标签或独立Flash播放器中自行加载时效果很好。只有在加载到我们的代码生成的SWF中时才会破坏3D。

因此,对于在CS5创作环境中应用3D转换的MovieClip,似乎在我们的代码SWF加载SWF时,这些转换未被应用/遵守。

这是我第一次涉足3D,所以我不确定是什么导致这种情况,但这是我测试/检查/试过的,但都无济于事:

  • 我确保在创作环境中选择了actionscript 3和Flash Player 10 / 10.1。
  • 我尝试将动画加载到Flash Player版本10.0,10.1,10.2和11中使用Flex 4.1,4.5和4.6构建的代码SWF中
  • 我已将Matrix3D应用于加载SWF动画的容器,包括标识和旋转。我可以看到旋转的容器在透视图中可以使用3D,因此我知道我的代码SWF具有3D功能。

我希望有一些简单的技巧,我缺少一些设置。谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

这可能是您的Flex代码中正在发生的事情,例如停止动画或不启动动画。您可以发布用于加载SWF的代码吗?

这也可能是竞争条件。您可能必须等到加载SWF(例如,添加ToTage事件等)才能使用它们。

答案 1 :(得分:0)

我遇到了你的问题,因为我遇到了完全相同的问题......经过大量的讨论,解决方案(对我而言)归结为:

如果您在任何时候强烈地将CHILD swf键入类,或者使用PARENT中的点语法引用其任何变量,它就会中断。即使它只是一条跟踪消息。

我不得不替换它:

var stoneVideo:StoneVideo = loader.content as StoneVideo;
stoneVideo.stoneText = model.stoneText;

有了这个:

loader.content["stoneText"] = model.stoneText;

它开始正常工作。希望这有帮助!

答案 2 :(得分:0)

我无法发布代码,但事实证明,我们的加载程序代码中的一个过于谨慎的微妙之处从未引起过我们:

我们有一个自定义类,可以为我们加载所有图像(包括一些实用程序和内置的常用功能)。在加载完成时,此代码使用loader.content,将其作为子项添加到自身,并且 - 这是踢脚器 - 使用close()和unloadAndStop()清理不再需要的加载器。

我认为以这种方式清理加载器似乎是合理的,并且它一直工作到现在(使用静态图像,静态SWF和SWF动画),但它在加载3D swfs时引起了上述问题(并且它转向在加载视频SWF时,这也导致奇怪的URL未找到错误。)

禁用过度谨慎的Loader清理修复了我的问题。