as3 Использование измененной информации для масштабирования моего мувиклипа

Я работаю над воздушным мобильным приложением во Flash CS5.5 и довольно новичок в этом.

Итак, вот моя проблема: я поместил весь свой контент внутри мувиклипа с именем base. Я написал код для изменения размера моего мувиклипа в зависимости от устройства, на котором он работает, и ориентации устройств. Эта часть работает нормально, проблема в том, что я пытался создать функцию масштабирования.

Базовый мувиклип масштабируется, но у меня возникают проблемы с работой минимальной границы, чтобы мой контент никогда не масштабировался меньше, чем ширина устройства. Я считаю, что это относится к исходной базовой ширине, а не к измененной базовой ширине. Любые идеи о том, как вызвать новую базовую ширину после функции изменения размера? Обратитесь к моему коду ниже и заранее спасибо за любую помощь :)

import flash.geom.Rectangle;

stop();

base.play();

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

var guiSize:Rectangle = new Rectangle(0, 0, 480, 800);
var appScale:Number = 1;


stage.addEventListener(Event.RESIZE, handleResize);
function handleResize(e:Event):void {
     var deviceSize:Rectangle = new Rectangle(0, 0,  stage.stageWidth, 
     stage.stageHeight);
appScale = deviceSize.width / guiSize.width;
base.width = appScale * guiSize.width; 
base.height = appScale * guiSize.height;

Multitouch.inputMode = MultitouchInputMode.GESTURE;
base.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom (e:TransformGestureEvent):void{ 

if (base.scaleX * e.scaleX < 1)
{}
else if (base.scaleX * e.scaleX > 5) 
{}
else {
base.scaleX *= (e.scaleX+e.scaleY)/2; 
       base.scaleY *= (e.scaleX+e.scaleY)/2;}
}
}

person user1892969    schedule 10.12.2012    source источник


Ответы (1)


Поиграв с кодом и попробовав множество различных решений, я пришел к приведенному ниже коду, и, похоже, он работает нормально. Проблема заключалась в том, что мой базовый клип был увеличен после функции изменения размера, которая отбрасывала переменную base.scaleX для моей функции масштабирования. Это связано с тем, что base.scaleX больше единицы. Вы можете увидеть проблему здесь:

if (base.scaleX * e.scaleX < 1)

Код заставлял мой базовый мувиклип уменьшаться меньше, чем окно моего устройства. Мое решение состоит в том, чтобы вместо этого использовать новый base.width, чтобы определить минимальное и максимальное масштабирование для моей функции масштабирования. Как отмечено ниже.

function onZoom (e:TransformGestureEvent):void{ 
       if (base.width * e.scaleX < deviceSize.width )
       {}
else if (base.width * e.scaleX > deviceSize.width * 2 ) 
{}
else {
base.scaleX *= (e.scaleX+e.scaleY)/2; 
       base.scaleY *= (e.scaleX+e.scaleY)/2;}
}
}
person user1892969    schedule 12.12.2012