我遇到这个问题,因为我无法找到有效搜索的正确术语。这是我正在做的事情: 这是一个太空射击游戏,在观众面前的舞台上演出。大屏幕显示观众在太空中飞行,射击小行星。在底部是抬头显示健康,盾牌,时间和弹药。随着时间的推移,盾牌会自动耗尽。一旦它达到0%,它将显示一个3位数代码,供观众呼叫飞行员(计算机上没有看大屏幕的人)。一旦他输入代码,屏蔽就会重新激活并继续循环。重新加载也是如此。
我正在使用Flash CC和AS3开发Air桌面应用程序。
现在,我将让计算机上的人在没有屏幕的情况下工作。观众将负责告诉他要去哪个方向,何时开火以及重装和重新安装的代码。这是针对高中生的,因此目标很多是大喊大叫。
我希望飞行员能够在他自己的显示器上看到除HUD之外的所有东西。就像我说的那样,他的背部是大屏幕而他只有一个键盘。是否可以在另一个窗口中复制/镜像/复制/显示我的游戏以供飞行员查看?他正在运行的计算机将使用投影仪作为扩展显示器。它不必是交互式的,因为他将控制在大屏幕上显示的游戏。这只会向他展示在没有抬头显示的情况下飞来飞去的船。
我希望这是有道理的。有任何想法吗?非常感谢你们给我的任何帮助!
贝
答案 0 :(得分:1)
我会尝试分别解决您的每个问题。
为了在投影屏幕上和飞行员的监视器上显示某些内容,您需要设计您的空中应用程序以包括两个屏幕,并以两个屏幕放在一起的分辨率在窗口模式下运行。假设您的显示器以1920x1080的分辨率运行,您的投影机将以1024x768的速度运行。这就是您希望应用程序看起来像:
您需要将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
}
答案 1 :(得分:0)
所以这就是我所做的(感谢Marcela的指导):
为解决双屏问题,我最终创建了两个独立的Air项目。第一个Air项目是我的游戏(基本太空射击游戏,小行星朝船上坠落)。 第二个Air项目是飞行员。请记住,我的游戏的目标是让观众在指导下向控制游戏的人尖叫(即"火!""""""左移!"等)。我想控制船只的人有自己的界面,显示有限的细节(允许观众贡献)。对于试点项目,我在舞台上创建了一个带有绿色轮廓的雷达式背景。使用本地连接,每当船舶移动并将它们应用于飞行员的绿色轮廓船时,我将船的x& y坐标从主游戏传递到飞行员应用程序。
每次将星号添加到舞台上时,我都会使用该小行星的坐标向该试用版app发送另一个localconnection方法。最后,船只,导弹和星形都以飞扬的形式出现在飞行员的应用程序中。如果在主游戏中销毁星号,我会向飞行员的应用程序发送一个局部连接方法,告诉它删除阵列中的blip,其索引与刚被破坏的小行星相同。
它非常好用。非常感谢你指出我正确的方向,马塞拉!