2009-09-16 70 views
0

我有幾個組件的屏幕位置取決於瀏覽器所在顯示器的分辨率。如何可靠地使用Actionscript捕獲屏幕分辨率?

loginBox.x =(flash.system.Capabilities.screenResolutionX - loginBox.width)/ 2; loginBox.y =(flash.system.Capabilities.screenResolutionY - loginBox.height)/ 2;

我遇到的問題是,該方法flash.system.Capabilities拉動附連到計算機的主監視器的分辨率。在大多數情況下,這不是問題,但在我的一臺電腦上,我有1680x1050和1440x900。在工作中,我有一個1920x1200和一個1680x1050,所以如果我在較小的顯示器上的瀏覽器中打開該頁面,事情不居中,我的工具面板完全在屏幕右側。

我有一塊JavaScript,我試過了,無論是在HTML和通過PHP,但問題是,如果我使用httpRequest或urlLoader抓住HTML文件,我得到的HTML源,如果我嘗試PHP腳本,我得到一個腳本塊,試圖寫一個cookie。如果在加載Flash網站之前沒有訪問過該頁面,或者如果禁用了Cookie,它將永遠不會被寫入,我無處可去。

有沒有我可以使用,即不依賴於餅乾,來檢測瀏覽器實際上是對的,而不是第一顯示器的只是分辨率顯示器的分辨率的方法?

回答

1

你爲什麼不使用stage.stageWidth和stage.stageHeight用於定位的目的?

編輯: 好吧,這裏是一個例子。 我在考慮你將這個代碼放在loginBox也駐留在容器中。 除非將對象添加到DisplayList,否則stage屬性是未定義的,所以您需要偵聽它何時添加,然後定位loginBox。

// in the constructor 
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

然後

private function onAddedToStage(evt:Event) { 
    loginBox.x = (stage.stageWidth - loginBox.width)/2; 
    loginBox.y = (stage.stageHeight - loginBox.height)/2; 
} 

另外,如果你有舞臺scaleMode設置爲noScale(這可能是這種情況),如果你需要不斷的重新定位基於瀏覽器的大小調整的loginBox,你需要聽Event.RESIZE事件

stage.addEventListener(Event.RESIZE, onResize); 
+0

我不知道爲什麼,但我有一個厭惡JavaScript,並儘可能避免它。我通過我的代碼,並得到stage.stageHeight工作。有點。我得到的錯誤消息爲一個無效的屬性或方法,所以增加了以下: 覆蓋保護的函數的updateDisplayList(參數unscaledWidth:數字,unscaledHeight屬性:編號):無效 { \t super.updateDisplayList(參數unscaledWidth,unscaledHeight屬性); \t myStageWidth = unscaledWidth; \t myStageHeight = unscaledHeight; } 我將不得不在我的桌面上嘗試它,看看是否一切都已癒合。 –

+0

在訪問舞臺前,必須將其添加到顯示列表中。您必須先聽取Event.ADDED_TO_STAGE。在調度Event.ADDED_TO_STAGE時觸發的方法內部,可以使用stage。stageWidth;否則,你會得到一個錯誤。常見的解決方法是在構造函數中檢查階段,如果無法訪問它,或者它爲null,那麼您將監聽Event.ADDED_TO_STAGE,這兩者都會導致一個init函數。 (stage)_init(); else addEventListener(Event.ADDED_TO_STAGE,_init); private function _init(e:Event = null):void { //您現在可以訪問階段 } –

+0

我的結構的一部分包含通過使用SWFLoader加載的應用程序。我發現這個子應用程序檢測到寬度爲1440,但高度爲802.我猜測這與工具欄有關。該應用程序還將遊戲​​演示加載到自身中,但是該應用程序檢測到寬度爲500,因爲它的容器沒有指定尺寸。我開始讓主應用程序執行檢查並使用LocalConnection分配數字,但最終使用了一個共享對象並設置了其他兩個應用程序以根據需要訪問它。 –

0

如果你想Flash和JavaScript之間的通信,ExternalInterface是要走的路。相反,寫一個cookie,只需從javascript獲取信息,並通過回調將其發送到閃存。