Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.11.2012, 15:20
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 1  
Ответить с цитированием
dimensb

Регистрация: Jun 2012
Сообщений: 16
Question stage.stageWidth меньше stage.width при stage.scaleMode = StageScaleMode.SHOW_ALL

Здравствуйте.

Пытаюсь использовать
Код AS3:
stage.scaleMode = StageScaleMode.SHOW_ALL
для масштабирования приложения, но вижу лишь увеличенную часть изображения.

--

Процесс загрузки приложения происходит следующим образом:
1. Загружается preloader
2. Preloader загружает основной код
3. Который, в свою очередь, загружает ресурсы в виде изображений, дополнительных swf и отрисовывает главное окно приложения.

Максимальный размер ресурса, который загружается на 3-м этапе - 1600х900, при масштабировании просто хотел положиться на stage.scaleMode = StageScaleMode.SHOW_ALL, однако, в процессе загрузки, вижу что

Код AS3:
stage.width =  1632
stage.stageWidth =  500
stage.height =  902.95
stage.stageHeight =  375
и на весь экран отображается лишь часть изображения.

Ниже представлены 2 изображения, не из приложения, просто чтобы дать представление о том, как это выглядит:
1. Название: 160x90.gif
Просмотров: 1614

Размер: 1.9 Кб
2. Название: 50x37.gif
Просмотров: 1641

Размер: 1.4 Кб

В html и js файлах, используемых для загрузки, width = height = 100%.
Пробовал загрузку в разных браузерах, результат одинаков.

Судя по всему размер 500x375 является размером по умолчанию, которую использует mxmlc (http://livedocs.adobe.com/flex/3/htm...pilers_13.html, опция default-size)

Если я правильно понимаю значения stage.stageWidth и stage.stageHeight, то они должны соответствовать максимальному размеру дочерних объектов. Такое поведение можно наглядно наблюдать в примере http://theactionscripter.com/2009/05...tagewidth.aspx (можно открыть его в отдельном окне, тогда будет видно что stageWidth совпадает с размером экрана http://theactionscripter.com/files/3...stagewidth.swf)

Если установить тэг компилятора
Код AS3:
[SWF(width="1600", height="900")]
, то окно отрисовывается верного размера, но, при этом, не масштабируется, а ведет себя как при NO_SCALE.

Понимаю, что можно использовать совместное решение установки тэга и установки
Код AS3:
stage.scaleMode = StageScaleMode.NO_SCALE
+ обрабатывать изменения размера самостоятельно, но хотелось бы добиться этого встроенными средствами.

Возможно кто-то сталкивался с похожей ситуацией и знает решение проблемы.

Заранее спасибо.

Старый 29.11.2012, 16:19
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 2  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
Что вообще нужно? Чтоб объект был всегда по ширине флешки?

Старый 29.11.2012, 16:27
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 3  
Ответить с цитированием
dimensb

Регистрация: Jun 2012
Сообщений: 16
Да, нужно чтобы окно браузера вмещало ролик полностью и flash масштабировал его при изменении размера окна.

Старый 29.11.2012, 16:36
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 4  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Лучше оставить NO_SCALE и модифицировать ваш DO по событию Event.RESIZE Stag'а. Мало ли какое разрешение будет у пользователя...
__________________
ЛОДКИ

Старый 29.11.2012, 16:51
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 5  
Ответить с цитированием
dimensb

Регистрация: Jun 2012
Сообщений: 16
Хотелось обойтись малой кровью, благо стандартное масштабирование делает как раз то, что надо. И подошло бы даже для разных разрешений. Но, увы.

В случае если не заработает придется так и поступить, спасибо за совет.

Старый 29.11.2012, 18:01
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 6  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
Цитата:
Сообщение от dimensb Посмотреть сообщение
В случае если не заработает придется так и поступить, спасибо за совет.
Конечно только событие RESIZE слушать, оно для этого и сделано.

Старый 29.11.2012, 18:04
dimensb вне форума Посмотреть профиль Отправить личное сообщение для dimensb Найти все сообщения от dimensb
  № 7  
Ответить с цитированием
dimensb

Регистрация: Jun 2012
Сообщений: 16
Цитата:
Сообщение от Sintesis Посмотреть сообщение
Конечно только событие RESIZE слушать, оно для этого и сделано.
Все верно, но масштабирование flash тоже должно работать из коробки, без дополнительных действий. Я пытался разобраться почему это не так.

Старый 29.11.2012, 20:16
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 8  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Потому что SHOW_ALL, будет стремиться показать весь изначальный размер stag'а.
Т.е. если браузер к примеру находится в оконном режиме и окно как-нибудь сжато, или у пользователя установлено разрешение которое вы не учли, то по краям вы увидети область, которая должна была бы находиться за пределами видимости, т.к. stage.stageWidth превышает stage.width.

Так, например, будет выглядеть ваш ролик с SHOW_ALL на квадратном мониторе. Красные полосы это дельта stage.height от stage.stageHeight.
Изображения
 
__________________
ЛОДКИ


Последний раз редактировалось FlashRus; 29.11.2012 в 20:58.
Старый 29.11.2012, 22:26
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Все верно, но масштабирование flash тоже должно работать из коробки, без дополнительных действий.
С чего бы это?

Старый 29.11.2012, 23:52
AlexeiSulga вне форума Посмотреть профиль Отправить личное сообщение для AlexeiSulga Найти все сообщения от AlexeiSulga
  № 10  
Ответить с цитированием
AlexeiSulga

Регистрация: Sep 2007
Сообщений: 43
У меня было несколько похожая задача. Есть флешка с фиксированной шириной, высоту влешки меняет javascript.

HTML, JS
Код AS3:
var fo = new FlashObject("myflash.swf", "myFlash", "919", "2000", "10");
<div style="width:919px; height:754px;" id="flashcontent_widget">
</div>
function resizeFlash(h)
{
$("#myFlash").attr("height", h);
}
Стартовые размеры флешки 919x754. Значение высоты 2000 в данном случае роли не играет.

AS3 Document class
Код AS3:
stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
stage.align = flash.display.StageAlign.TOP_LEFT;
stageResize();
stage.addEventListener(Event.RESIZE, stageResize, false, 0, true);
private function stageResize(event:Event = null):void 
{
	this.scaleX = this.scaleY = stage.stageWidth / 919;
}
"stage.stageWidth меньше stage.width". В моем понимании stage.stageWidth это ширина swf в браузере. Она зависит от html, stage.width - это ширина объектов на сцене. Необходимо также учитывать zoom в самом браузере. Если 1 тогда все нормально, если пользователь увеличит zoom тогда stage.stageWidth увеличится, в этом случае флешь дожен изменить scaleX document класса.

Другая серьезная проблема с которой я столкнулся быля связана с тем что при изменении размера swf из JS наблюдалось кратковременное (примерно 0.2 секунды) изменение aspect ratio флешки. Это было заметно и неприемлемо. Протестировал все 4 варианта StageScaleMode: SHOW_ALL, NO_SCALE, NO_BORDER, EXACT_FIT. Нормально работает только NO_SCALE.

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
stage scaling , Stage.scaleMode , масштабирование , размер окна

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:42.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.