|
|
|||||
Регистрация: Aug 2017
Сообщений: 32
|
Неравномерное растягивание видео
Здравствуйте.
Нашел на сайте скрипт - растягивания видеоролика по размеру окна с сохранением пропорций. Но тут есть необычный нюанс. Почему-то скрипт растягивает ролик - не равномерно, а с каким-то смещением. (На скриншотах видно, что сам видеоролик - при растягивании окна - располагается не строго посередине.) Как изменить скрипт, чтобы растягивание видеоролика - было равномерным, то есть строго по середине окна (как в длину, так и в ширину - с сохранением пропорций) ? import flash.media.SoundTransform; var myVideo:Video = new Video(); myVideo.height = 537.6; myVideo.width = 720.6; addChild(myVideo); var netConnection:NetConnection = new NetConnection(); netConnection.connect(null); var myStream:NetStream = new NetStream(netConnection); myStream.play("video/1.mp4"); myStream.soundTransform = new SoundTransform(0); myStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {}); myStream.addEventListener(NetStatusEvent.NET_STATUS, goAgain); myVideo.attachNetStream(myStream); function goAgain (event:NetStatusEvent): void { if(event.info.code == "NetStream.Play.Start") myStream.seek(20); if(event.info.code == "NetStream.Play.Stop") myStream.seek(0); } |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Может лучше весь код привести?
|
|
|||||
Регистрация: Aug 2017
Сообщений: 32
|
undefined, так это и есть весь код.
Посмотрите в файле: |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
эх очередной копипастер.
Вот функция,которая растягивает DisplayObject container с сохранением пропорций и выравнивает по центру private function update(e:Event = null):void { container.scaleX = container.scaleY = 1; var scale:Number=Math.min(stage.stageWidth /container.width,stage.stageHeight/container.height); container.scaleX = container.scaleY = scale; container.x = stage.stageWidth * 0.5 - container.width * 0.5; container.y = stage.stageHeight* 0.5 - container.height * 0.5; } Также в начало кода надо добавить |
|
|||||
Регистрация: Aug 2017
Сообщений: 32
|
undefined, ясно.
А куда эти фрагменты - в коде добавлять ? Я добавил их и что-то не работает. import flash.media.SoundTransform; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; private function update(e:Event = null):void { container.scaleX = container.scaleY = 1; var scale:Number=Math.min(stage.stageWidth /container.width,stage.stageHeight/container.height); container.scaleX = container.scaleY = scale; container.x = stage.stageWidth * 0.5 - container.width * 0.5; container.y = stage.stageHeight* 0.5 - container.height * 0.5; } var myVideo:Video = new Video(); myVideo.height = 537.6; myVideo.width = 720.6; addChild(myVideo); var netConnection:NetConnection = new NetConnection(); netConnection.connect(null); var myStream:NetStream = new NetStream(netConnection); myStream.play("video/1.mp4"); myStream.soundTransform = new SoundTransform(0); myStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {}); myStream.addEventListener(NetStatusEvent.NET_STATUS, goAgain); myVideo.attachNetStream(myStream); function goAgain (event:NetStatusEvent): void { if(event.info.code == "NetStream.Play.Start") myStream.seek(20); if(event.info.code == "NetStream.Play.Stop") myStream.seek(0); } |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
если код в кадре, слово private у функции надо убрать
Добавлено через 10 минут код работает с объектом container, которого у тебя нет.Подумай что должно быть вместо него. |
|
|||||
Регистрация: Aug 2017
Сообщений: 32
|
undefined, все поправил как вы сказали.
Объект container - заменил на объект myVideo. Но теперь окно находится не на середине (а с краю), и не подгоняется под свои пропорции. import flash.media.SoundTransform; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; function update(e:Event = null):void { myVideo.scaleX = myVideo.scaleY = 1; var scale:Number=Math.min(stage.stageWidth /myVideo.width,stage.stageHeight/myVideo.height); myVideo.scaleX = myVideo.scaleY = scale; myVideo.x = stage.stageWidth * 0.5 - myVideo.width * 0.5; myVideo.y = stage.stageHeight* 0.5 - myVideo.height * 0.5; } var myVideo:Video = new Video(); myVideo.height = 537.6; myVideo.width = 720.6; addChild(myVideo); var netConnection:NetConnection = new NetConnection(); netConnection.connect(null); var myStream:NetStream = new NetStream(netConnection); myStream.play("video/1.mp4"); myStream.soundTransform = new SoundTransform(0); myStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {}); myStream.addEventListener(NetStatusEvent.NET_STATUS, goAgain); myVideo.attachNetStream(myStream); function goAgain (event:NetStatusEvent): void { if(event.info.code == "NetStream.Play.Start") myStream.seek(20); if(event.info.code == "NetStream.Play.Stop") myStream.seek(0); } |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
пара букв чтоб парсер не возникал
|
|
|||||
Регистрация: Aug 2017
Сообщений: 32
|
undefined, а как добавить эту функцию в блок изменения размеров окна?
Функция называется function update. Изменение размеров идет в блоке var myVideo В общем куда только не добавлял этот фрагмент - все равно не растягивает размеры видео. import flash.media.SoundTransform; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var myVideo:Video = new Video();function update(e:Event = null):void { myVideo.scaleX = myVideo.scaleY = 1; var scale:Number=Math.min(stage.stageWidth /myVideo.width,stage.stageHeight/myVideo.height); myVideo.scaleX = myVideo.scaleY = scale; myVideo.x = stage.stageWidth * 0.5 - myVideo.width * 0.5; myVideo.y = stage.stageHeight* 0.5 - myVideo.height * 0.5; } myVideo.height = 537.6; myVideo.width = 720.6; addChild(myVideo); var netConnection:NetConnection = new NetConnection(); netConnection.connect(null); var myStream:NetStream = new NetStream(netConnection); myStream.play("video/1.mp4"); myStream.soundTransform = new SoundTransform(0); myStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {}); myStream.addEventListener(NetStatusEvent.NET_STATUS, goAgain); myVideo.attachNetStream(myStream); function goAgain (event:NetStatusEvent): void { if(event.info.code == "NetStream.Play.Start") myStream.seek(20); if(event.info.code == "NetStream.Play.Stop") myStream.seek(0); } |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
ttt480, если ты ждешь что я готовое решение за тебя напишу - не надейся.
От того,что ты переместил функцию update ничего не меняется(подсказка:код внутри функции не выполняется если функцию никто не вызывает). Теперь что тебе надо сделать: объект stage при изменении размеров окна испускает событие Event.RESIZE.Тебе надо повесить слушатель на это событие.Как это сделать читаем например тут |
Часовой пояс GMT +4, время: 12:16. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|