По сути, вы пытаетесь масштабировать изображение таким образом, чтобы оно никогда не попадало на экран. Вы хотите масштабировать его до минимального размера, который гарантированно охватит всю область окна.
Хотя я не знаю ActionScript, код выглядит просто.
Попробуйте это:
var width = stage.stageWidth;
var height = stage.stageWidth / aspectRate;
if (height < stage.stageHeight)
{
var factor = stage.stageHeight / height;
height = stage.stageHeight;
width = width * factor;
}
Сначала будет вычислено, насколько большим должно быть изображение, чтобы закрыть окно справа налево.
Затем он смотрит на высоту масштабированного изображения и, если она недостаточно велика, чтобы покрывать окно сверху вниз, вычисляет, насколько больше должно быть изображение, чтобы скрыть эту часть, масштабирует ширину на эту величину и устанавливает высоту в высоту окна.
Это должно сработать, без зацикливания.
Последняя функция будет выглядеть так:
public function calculateSize():Array {
var width = stage.stageWidth;
var height = stage.stageWidth / aspectRate;
if (height < stage.stageHeight)
{
var factor = stage.stageHeight / height;
height = stage.stageHeight;
width = width * factor;
}
return new Array(width, height);
}