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

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

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

Регистрация: Aug 2017
Сообщений: 32
По умолчанию Неравномерное растягивание видео

Здравствуйте.
Нашел на сайте скрипт - растягивания видеоролика по размеру окна с сохранением пропорций.
Но тут есть необычный нюанс.
Почему-то скрипт растягивает ролик - не равномерно, а с каким-то смещением.
(На скриншотах видно, что сам видеоролик - при растягивании окна - располагается не строго посередине.)

Как изменить скрипт, чтобы растягивание видеоролика - было равномерным, то есть строго по середине окна (как в длину, так и в ширину - с сохранением пропорций) ?

Код AS1/AS2:
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);
}
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 29
Размер:	98.5 Кб
ID:	33172  
Изображения
 

Старый 27.01.2018, 21:33
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 2  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Может лучше весь код привести?

Старый 27.01.2018, 21:47
ttt480 вне форума Посмотреть профиль Отправить личное сообщение для ttt480 Найти все сообщения от ttt480
  № 3  
Ответить с цитированием
ttt480

Регистрация: Aug 2017
Сообщений: 32
undefined, так это и есть весь код.

Посмотрите в файле:
Вложения
Тип файла: rar 111.rar (4.2 Кб, 15 просмотров)

Старый 27.01.2018, 21:59
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 4  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
эх очередной копипастер.
Вот функция,которая растягивает DisplayObject container с сохранением пропорций и выравнивает по центру
Код AS3:
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;
}
Надо ее вызывать ее при изменении размеров окна
Также в начало кода надо добавить
Код AS3:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

Старый 27.01.2018, 22:44
ttt480 вне форума Посмотреть профиль Отправить личное сообщение для ttt480 Найти все сообщения от ttt480
  № 5  
Ответить с цитированием
ttt480

Регистрация: Aug 2017
Сообщений: 32
undefined, ясно.

А куда эти фрагменты - в коде добавлять ?
Я добавил их и что-то не работает.
Код AS1/AS2:
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);
}

Старый 27.01.2018, 22:57
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 6  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
если код в кадре, слово private у функции надо убрать

Добавлено через 10 минут
код работает с объектом container, которого у тебя нет.Подумай что должно быть вместо него.

Старый 27.01.2018, 23:24
ttt480 вне форума Посмотреть профиль Отправить личное сообщение для ttt480 Найти все сообщения от ttt480
  № 7  
Ответить с цитированием
ttt480

Регистрация: Aug 2017
Сообщений: 32
undefined, все поправил как вы сказали.
Объект container - заменил на объект myVideo.

Но теперь окно находится не на середине (а с краю), и не подгоняется под свои пропорции.
Код AS1/AS2:
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);
}
Миниатюры
Нажмите на изображение для увеличения
Название: 1-.jpg
Просмотров: 36
Размер:	137.0 Кб
ID:	33175   Нажмите на изображение для увеличения
Название: 2-.jpg
Просмотров: 30
Размер:	74.0 Кб
ID:	33176  

Старый 27.01.2018, 23:34
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Сообщение от undefined Посмотреть сообщение
эх очередной копипастер.
Вот функция,которая растягивает DisplayObject container с сохранением пропорций и выравнивает по центру
...
Надо ее вызывать ее при изменении размеров окна
...
пара букв чтоб парсер не возникал

Старый 28.01.2018, 00:17
ttt480 вне форума Посмотреть профиль Отправить личное сообщение для ttt480 Найти все сообщения от ttt480
  № 9  
Ответить с цитированием
ttt480

Регистрация: Aug 2017
Сообщений: 32
undefined, а как добавить эту функцию в блок изменения размеров окна?
Функция называется function update.
Изменение размеров идет в блоке var myVideo
В общем куда только не добавлял этот фрагмент - все равно не растягивает размеры видео.
Код AS1/AS2:
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);
}

Старый 28.01.2018, 00:40
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 10  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
ttt480, если ты ждешь что я готовое решение за тебя напишу - не надейся.
От того,что ты переместил функцию update ничего не меняется(подсказка:код внутри функции не выполняется если функцию никто не вызывает).
Теперь что тебе надо сделать: объект stage при изменении размеров окна испускает событие Event.RESIZE.Тебе надо повесить слушатель на это событие.Как это сделать читаем например тут

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

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

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


 


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


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