1.Коэффициент пропорциональности
Один из способов сделать это - рассчитать коэффициент пропорциональности.Он равен ширине, деленной на высоту:
var proportions: Number = video.width / video.height;
Вы можете применить этот коэффициент к любой новой ширине или высоте, для которой вы установили видео:
function scaleProportionalByWidth ( newWidth:Number ) : void {
video.width = newWidth;
video.height = newWidth / proportions;
}
function scaleProportionalByHeight ( newHeight : Number ) : void {
video.height = newHeight;
video.width = newHeight * proportions;
}
2.Коэффициент масштабирования
Другой способ сделать это - выяснить, по какому коэффициенту масштабировать видео, затем установите scaleX
и scaleY
вместо width
и height
:
function scaleProportionalByWidth ( newWidth : Number ) : void {
scaleProportional ( newWidth, video.width );
}
function scaleProportionalByHeight ( newHeight : Number ) : void {
scaleProportional ( newHeight, video.height );
}
function scaleProportional ( newValue:Number, oldValue : Number ) : void {
var scale:Number = newValue / oldValue;
video.scaleX *= scale;
video.scaleY *= scale;
}
3.Пропорциональные классы экранных объектов
Вы также можете использовать подход в 2. для создания пропорционального подкласса любого DisplayObject
путем переопределения сеттеров для width
, height
, scaleX
и scaleY
длясделать все масштабирование пропорциональным:
// works for Sprite, MovieClip...
public class ProportionalDisplayObject extends DisplayObject {
override public function set width ( width:Number ) : void {
scaleX = width / super.width;
}
override public function set height ( height:Number ) : void {
scaleY = height / super.height;
}
override public function set scaleX ( scaleX : Number ) : void {
super.scaleX = super.scaleY = scaleX;
}
override public function set scaleY ( scaleY : Number ) : void {
super.scaleY = super.scaleX = scaleY;
}
}