2012-06-03 44 views
3

我正在檢查Flash的3D功能Away3D,我正在按照教程here。儘管我遇到了一個重大問題。每次我跑我的項目在瀏覽器中,我得到這個錯誤:Away3D Context3D不可用

Error #2044: Unhandled ErrorEvent:. text=Error #3702: Context3D not available.

我不能看到這個錯誤來自,但是偏偏我的構造函數結束,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完美。

此外,教程頁面上的示例文件運行完美。缺少什麼設置,我該如何解決?

+2

您是否設置了? – Torious

+0

嗯,是的,我做了,但由於默認情況下新的html包裝器使用swfObject,我還需要在swfObject params對象中添加參數 –

+0

不能相信我在這一天失去了半天 –

回答

11

好吧,看起來你需要設置wmodedirect來使用3D API。

雖然我已經看到信息的該位後,HTML包裝需要在3個地方被修改爲它的所有配置工作:

(1)在JavaScript爲swfObject

params.wmode = "direct"; 

(2)在在<object>標籤的標籤<object>

<param name="wmode" value="direct" /> 

和(3)用於IE

<param name="wmode" value="direct" /> 
3

我在這裏發佈希望能幫助任何人有同樣的問題,但出口到空氣。

編輯應用descriptor.xml和值更改爲rendermode到:

<renderMode>direct</renderMode> 

希望它可以幫助

5

爲了進一步延長有用的提示,如果您正試圖打開使用的Context3D的應用在新的NativeWindow中,您需要確保您在NativeWindowInitOptions中指定了傳遞到NativeWindow中的renderMode。在創建本機窗口後,渲染模式無法更改。

// New window. 
options = new NativeWindowInitOptions(); 
options.renderMode = "direct"; 
options.transparent = true; 
options.systemChrome = NativeWindowSystemChrome.NONE; 
nativeWindow = new NativeWindow(options);