2014-01-27 32 views
0

我遇到了這個問題,因爲我無法弄清楚有效搜索的正確術語。以下是我的工作內容: 這是一個在觀衆面前的舞臺上播放的太空射擊遊戲。大屏幕向觀衆展示了飛船在太空中飛行,拍攝小行星。底部是擡頭顯示健康,盾牌,時間和彈藥。屏蔽會隨着時間自動耗盡。一旦達到0%,它將顯示一個3位數的代碼讓觀衆呼叫飛行員(計算機上沒有看大屏幕的人)。一旦他輸入代碼,屏蔽重新激活,循環繼續。重新加載也是如此。鏡像/複製一個動畫片段as3空氣

我正在使用Flash CC和AS3的Air桌面應用程序。

現在,我要讓這個人在沒有屏幕的電腦上工作。觀衆將負責告訴他要去哪個方向,什麼時候開火,以及重新加載和屏蔽的代碼。這是針對高中生的,所以目標很多都是大喊大叫。

我希望飛行員能夠在自己的顯示器上看到除HUD之外的所有東西。就像我說的,他的背部是大屏幕,他只有一個鍵盤。是否有在另一個窗口中複製/鏡像/複製/顯示我的遊戲供飛行員查看?他將使用的計算機將使用投影儀作爲擴展顯示器。它不需要互動,因爲他會控制在大屏幕上顯示的遊戲。這隻會讓他看到飛船在沒有顯示器的情況下飛行。

我希望這是有道理的。有任何想法嗎?非常感謝你們給我的任何幫助!

Tony

回答

1

我會嘗試單獨解決您的每個問題。

爲了在投影屏幕和飛行員的顯示器上顯示某些東西,您需要設計空氣應用程序以包含兩個屏幕並以兩個屏幕分辨率的窗口模式運行。假設您的顯示器以1920x1080的分辨率運行,您的投影機將推動1024x768。這是你想你的應用程序是什麼樣子:

application layout

你要設置你的AIR設置使用自定義鑲邊,這將隱藏標準窗口鑲邊。您還需要在高級選項卡,設置初始窗口設置:

advanced air settings

這一切都將設置你可以在一臺計算機上運行的應用程序並在本質上,兩個獨立的顯示器。

現在,對於「複製」部分。你想要做的是在飛行員看來有一個Bitmap,你將不斷地畫出你想讓他看到的部分,而不是你不想讓他看到的部分。這個過程通常被稱爲blitting。

我不知道你的應用程序是如何設置的,但我希望你的HUD有些獨立。所以我們可以說,你有一個MovieClip與除HUD一切都在它,這裏就是你會做什麼:

var _pilotViewCanvasData:BitmapData = new BitmapData(1920, 1080); // ideally, you would make this just big enough to display what you need to display, not the actual size of the pilot view 
var pilotViewCanvas:Bitmap = new Bitmap(_pilotViewCanvas); 
//add your canvas to the pilot's view area of your application 
addChild(pilotViewCanvas); 

//add an enter frame listener so you can repaint the canvas every frame 
addEventListener(Event.ENTER_FRAME, onTick); 
function onTick(e:Event):void 
{ 
    _pilotViewCanvasData.draw(yourGameClip); // this is where you paint the canvas with your display 
} 
+0

這太棒了!感謝您花時間幫助!是的,我的HUD位於一個自制的動畫片段中,因此位圖繪製是一個完美的解決方案。擴展的舞臺尺寸技巧可能是我的目標,但對我的情況並不理想。遊戲本身正在分發,我不知道計算機或投影儀的分辨率。我正在考慮使用兩個應用程序之間的本地連接來爲飛行員創建一個單獨的空中應用程序來進行通信。我從來沒有這樣做過。是否有可能將pilotViewCanvas發送到其他空中應用程序?再次感謝您的快速,徹底的答覆! – Tony

+0

您當然可以使用'LocalConnection'在兩個應用程序之間進行通信。此時,您可能希望儘量減少來回傳遞的信息量。根據遊戲的大小,「BitmapData」對象可能會變得非常大。這就是說,你可能要考慮傳遞來回座標。然後,在您的試點視圖中,您可以使用座標重新構建遊戲視圖。 – Marcela

0

所以這就是我所做的(感謝馬塞拉的指導):

爲了解決雙屏幕問題,我最終創建了兩個獨立的Air項目。第一空氣項目是我的遊戲(基本太空射手與小行星落在船上)。 第二個空氣項目是爲飛行員。請記住,我的遊戲的目標是讓觀衆在指導下向控制遊戲的人大聲尖叫(即「火警!」,「重新加載!」,「移動左側!」等)。我想要控制船舶的人有他們自己的界面,顯示有限的細節(讓觀衆貢獻)。對於這個試點項目,我創建了一個雷達類型的背景,並在舞臺上繪製了一條綠色輪廓。使用本地連接時,每當船舶移動並將它們應用到飛行員的綠色輪廓船上時,我都會將主遊戲的y座標傳遞給飛行員應用程序。

每當一個astroid被添加到舞臺上,我發送另一個本地連接方法的小行星的座標飛行員的應用程序。最後,這艘飛船,導彈和天文望遠鏡都以小閃亮的形式出現在飛行員的應用程序中。如果主遊戲中的星球遭到破壞,我會向飛行員的應用程序發送一個本地連接方法,告訴它刪除與剛剛銷燬的小行星相同索引的數組中的blip。

它工作得非常好。非常感謝Marcela指引我朝着正確的方向發展!

相關問題