Отражение/дублирование мувиклипа as3 Air

У меня проблемы с этим, потому что я не могу понять правильную терминологию для эффективного поиска. Вот над чем я работаю: это космический шутер, который разыгрывается на сцене перед публикой. На большом экране зрителям показывают корабль, летящий сквозь космос, стреляющий по астероидам. Внизу находится дисплей с изображением здоровья, щита, времени и боеприпасов. Щит автоматически истощается со временем. Как только он достигнет 0%, он отобразит 3-значный код, чтобы зрители могли позвать пилота (человека за компьютером, который не смотрит на большой экран). Как только он вводит код, щит снова активируется, и цикл продолжается. Это справедливо и для перезарядки.

Я работаю над настольным приложением Air с Flash CC и AS3.

А пока я заставлю человека за компьютером работать без экрана. Аудитория будет нести ответственность за то, чтобы сообщить ему, в каком направлении идти, когда стрелять, а также за коды для перезагрузки и смены щита. Это для старшеклассников, поэтому цель много кричать.

Я бы хотел, чтобы пилот мог видеть все, кроме HUD, на своем собственном дисплее. Как я уже сказал, он стоит спиной к большому экрану и у него только клавиатура. Можно ли копировать/отражать/дублировать/отображать мою игру в другом окне для просмотра пилотом? Компьютер, с которого он будет его запускать, будет использовать проектор в качестве расширенного дисплея. Это не должно быть интерактивным, потому что он будет управлять игрой, которая отображается на большом экране. Это просто показало бы ему корабль, летящий вокруг, без отображения на лобовом стекле.

Я надеюсь, что в этом есть смысл. Любые идеи? Большое спасибо за любую помощь, которую вы, ребята, можете мне дать!

Тони


person Tony    schedule 27.01.2014    source источник


Ответы (2)


Я постараюсь ответить на каждый ваш вопрос отдельно.

Чтобы отобразить что-то и на проекционном экране, и на мониторе для пилота, вам нужно спроектировать ваше воздушное приложение так, чтобы оно включало оба экрана и работало в оконном режиме с разрешением двух экранов, вместе взятых. Допустим, ваш монитор работает с разрешением 1920x1080, а ваш проектор поддерживает разрешение 1024x768. Вот как вы хотите, чтобы ваше приложение выглядело так:

макет приложения

Вы захотите настроить Air Settings для использования пользовательского хрома, это скроет стандартный хром окна. Вы также захотите установить начальные настройки окна на вкладке «Дополнительно»:

расширенные настройки воздуха

Все это позволит вам запускать приложение на одном компьютере и иметь, по сути, два отдельных дисплея.

Теперь, что касается «дублирования». Что вам нужно сделать, так это иметь Bitmap в поле зрения пилота, на котором вы будете постоянно рисовать те части, которые вы хотите, чтобы он видел, но не те части, которые вы не хотите, чтобы он видел. Этот процесс более известен как блиттинг.

Я не знаю, как именно настроено ваше приложение, но я надеюсь, что ваш 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
}
person Marcela    schedule 27.01.2014
comment
Это так здорово! Спасибо, что нашли время помочь! Да, мой HUD находится в отдельном мувиклипе, поэтому растровое изображение — идеальное решение. Трюк с увеличенным размером сцены может быть тем, что я использую, но он не идеален для моей ситуации. Сама игра распространяется, и я не буду знать разрешения компьютеров или проекторов. Я думал о создании отдельного авиаприложения для пилота, используя локальное соединение между двумя приложениями для связи. Я никогда не делал это раньше. Можно ли отправить pilotViewCanvas в другое воздушное приложение? Еще раз спасибо за быстрый, исчерпывающий ответ! - person Tony; 28.01.2014
comment
Вы, безусловно, можете использовать LocalConnection для связи между двумя приложениями. На этом этапе вы можете захотеть свести к минимуму количество информации, передаваемой туда и обратно. В зависимости от размера вашей игры объект BitmapData может стать довольно большим. При этом вы можете рассмотреть возможность передачи координат туда и обратно. Затем в пилотном представлении вы можете использовать координаты для воссоздания игрового представления. - person Marcela; 28.01.2014

Вот что я сделал (спасибо Марселе):

Чтобы решить проблему с двумя экранами, я создал два отдельных проекта Air. Первым проектом Air была моя игра (базовый космический шутер с падающим на корабль астероидом). Второй проект Air был для пилота. Помните, цель моей игры состояла в том, чтобы зрители кричали человеку, управляющему игрой, под руководством (т. Я хотел, чтобы человек, управляющий кораблем, имел свой собственный интерфейс, показывающий ограниченные детали (позволяющий аудитории вносить свой вклад). Для пилотного проекта я создал фон типа радара с зеленым контуром корабля на сцене. Используя localconnection, я передавал координаты x&y корабля из основной игры в приложение пилота каждый раз, когда корабль перемещался, и применял их к кораблю пилота, обведенному зеленым цветом.

Каждый раз, когда на сцену добавлялся астероид, я отправлял еще один метод локального подключения в пилотное приложение с координатами этого астероида. В конце концов, корабль, ракеты и астроиды появились в приложении пилота в виде маленьких точек. Если астероид был уничтожен в основной игре, я отправлял метод localconnection в приложение пилота, сообщая ему удалить метку в массиве с тем же индексом, что и у только что уничтоженного астероида.

Это работает невероятно хорошо. Большое спасибо за то, что указали мне правильное направление, Марсела!

person Tony    schedule 29.01.2014