2015-09-18 3 views
1

Я создаю приложение смешанного взаимодействия AS3/AIR. В некоторых моих сценах используются обычные классы отображения, отображенные процессором (flash.display.Sprite, flash.display.MovieClip), а другой графический режим высокой плотности использует Starling. Я могу переключаться между ними и использовать их с радостью, и я могу переключаться между оконным режимом на 720p в полноэкранный режим.AS3: изменение размера StageWebView на Event.RESIZE при использовании Starling

Однако я просто добавил StageWebView, чтобы легко добавить некоторый контент на основе HTML, и у меня возникли проблемы с изменением размера. Если я не буду называть «новый Starling()», то экземпляр StageWebView будет правильно изменять размер, чтобы поддерживать одинаковые относительные размеры экрана при переключении с оконного на FullScreen. Однако, как только я создаю экземпляр Starling, StageWebView не будет корректно изменяться в полноэкранном режиме; он сохраняет первоначально установленные абсолютные размеры. Если я не создаю экземпляр Starling, StageWebView полностью изменится.

Нужен ли мне обработчик событий для Event.RESIZE, чтобы специально настроить элемент viewPort объекта StageWebView? Как получить правильные относительные размеры от первоначального фиксированного размера окна? (Я пробовал смотреть на ширину/высоту сцены, и цифры были странно большими, а AIR не смог правильно построить новый прямоугольник).

Я хотел бы получить любой образец кода для тех, кто решил эту проблему. Благодарю.

+1

Похоже, я неправильно вычислил ширину от stage.width, когда мне захотелось stage.stageWidth (и высота соответственно). Да, решение состоит в том, чтобы вручную изменить размер, см. Ответ ниже. –

+0

Множество неправильных утверждений в вопросе и ответе, которые вы разместили сами. Мой совет заключается в том, чтобы удалить все это, поскольку он никому не поможет. Конечно, StageWebView не изменяет размеры по мере того, как вы утверждаете, и во Flash нет механизма, который автоматически изменил бы размер StageWebView. Только кодер может дать размер, передав объект прямоугольника в окно просмотра StageWebView. Это исправление, мы можем теперь только заключить, что ваш код и только ваш код создают проблему, и ваш ответ - это только исправление вашего собственного кода. – BotMaster

+0

StageWebView, добавленный в проект без Starling, отрегулирует его размер относительно сцены, если приложение переходит к FULL_SCREEN_INTERACTIVE. У меня есть рабочий код, который демонстрирует это. –

ответ

0

Хорошо, исправлено это. В то время как без Starling обычный Flash Renderer будет обрабатывать размер класса StageWebView правильно, Starling, мы должны обрабатывать собственные события изменения размера.

Таким образом, в методе onAddedToStage (который сам по себе является обработчик Event.ADDED_TO_STAGE) моего Sprite-производного класса контейнера, добавить этот:

addEventListener (Event.RESIZE, OnResize);

А затем эта функция:

private function onResize(e:Event):void 
{ 
    var origH:Number = 720; 
    var origW:Number = 1280; 

    var baseRect:Rectangle = new Rectangle(40,40, 1200, 640); 

    var newX:Number = baseRect.x * stage.stageWidth/origW; 
    var newY:Number = baseRect.y * stage.stageHeight/origH; 

    var newW:Number = baseRect.width * stage.stageWidth/origW; 
    var newH:Number = baseRect.height * stage.stageHeight/origH; 

    m_webView.viewPort = new Rectangle(newX,newY,newW,newH); 
} 

Конечно, я не должен жестко закодировать 720 и 1280, и базовый размера в иллюминаторе, но вы получите идею.