我使用Away3D查看了Flash的3D功能,并且我按照教程here进行了操作。我遇到了一个重大问题。每次我在浏览器中运行我的项目时,都会收到此错误:
错误#2044:未处理的ErrorEvent: text =错误#3702:Context3D不可用。
我无法看到此错误的来源,但它会在我的构造函数结束之后和ENTER_FRAME
处理程序启动之前发生。
我的代码是这样的:
package {
import away3d.containers.View3D;
import away3d.entities.Mesh;
import away3d.materials.ColorMaterial;
import away3d.primitives.SphereGeometry;
import flash.display.Sprite;
import flash.events.Event;
[SWF(backgroundColor="#000000", frameRate="60", width="1024", height="768")]
public class TestAway extends Sprite {
private var view:View3D;
public function TestAway() {
view=new View3D();
addChild(view);
var sphereGeometry:SphereGeometry=new SphereGeometry(350);
var sphereMaterial:ColorMaterial=new ColorMaterial(0xff0000);
var mesh:Mesh=new Mesh(sphereGeometry, sphereMaterial);
view.scene.addChild(mesh);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {
view.render();
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}
现在奇怪的是,当我在浏览器上运行它(FP 11.2)时,它不起作用(给出错误),但我可以完美地从桌面运行swf。
此外,教程页面上的示例文件运行完美。缺少什么设置,我该如何解决?
答案 0 :(得分:11)
好吧,您似乎需要将wmode
设置为direct
才能使用3D API。
虽然我已经看到了这些信息,但是html包装器需要在3个位置进行修改才能在所有配置上运行:
(1)在swfObject
params.wmode = "direct";
(2)在<object>
标记
<param name="wmode" value="direct" />
IE中的<object>
标签中的和(3)
<param name="wmode" value="direct" />
答案 1 :(得分:5)
要扩展更多有用的提示,如果您尝试在新的NativeWindow中打开使用Context3D的应用程序,则需要确保在NativeWindowInitOptions中指定了传递给NativeWindow的renderMode。创建本机窗口后,渲染模式无法更改。
// New window.
options = new NativeWindowInitOptions();
options.renderMode = "direct";
options.transparent = true;
options.systemChrome = NativeWindowSystemChrome.NONE;
nativeWindow = new NativeWindow( options );
答案 2 :(得分:3)
我在这里发帖,希望能帮助遇到同样问题的人,但要导出到AIR。
编辑app descriptor.xml并将rendermode的值更改为:
<renderMode>direct</renderMode>
希望有所帮助