Всем привет. Почти дописал прогу. Отдал заказчику на тестирование, и тот говорит, что панели которые выезжают-заезжают по нажатию очень часто останавливаются на половине пути. Анимация у меня завязана на Tween'ах. Странно, но на машине, на которой пишу приложение, таких проблем не возникало. Решил попробовать протестировать приложение на нетбуке и убедился, выезжающая панель зависает иногда. В приложении у меня всего 3 панели и один раз было что они все одновременно замерли. В чем проблема не могу понять. В поисковиках ничего подобного не нарыл. Кто чего может подсказать?
Вот часть кода с главной выезжающей панелью mainMenu (вертикальное меню с левой стороны экрана). Подгружаю XML файл, в котором прописаны названия кнопок главного меню и всякая остальная дрябедень. Отображаю главное меню. По нажатию по кнопке tab меню выезжает-заезжает - метод showHide. Но почему иногда бывает не доезжает до нужной позиции???

Код AS3:
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.transitions.easing.Regular;
import fl.transitions.TweenEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite {
private var fileLoader:URLLoader;
private var fileRequest:URLRequest;
private var fileXml:XML;
private var init:MainSlide;
private var mainMenu:MainMenu;
private var gamePanel:GamePanel;
private var roundPanel:RoundPanel;
private var helpPanel:HelpPanel;
private var currGame;
private var currQuestion;
public function Main() {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
fileLoader = new URLLoader();
fileRequest = new URLRequest("file.xml");
fileLoader.addEventListener(Event.COMPLETE, fileLoadComplete);
fileLoader.load(fileRequest);
}
private function fileLoadComplete(e:Event):void {
fileXml = new XML(e.target.data);
init = new MainSlide();
init.bg._w = init.bg.width;
init.bg._h = init.bg.height;
init.logo._w = init.logo.width;
init.logo._h = init.logo.height;
addChild(init);
bgResize();
logoResize();
mainMenu = new MainMenu();
mainMenu.autoHide = true;
init.addChild(mainMenu);
var btnGame:Object = {};
for (var i=0; i<fileXml.children().length(); i++){
btnGame[i] = new ButtonGame(i+1);
btnGame[i].scaleX = btnGame[i].scaleY = 0.8;
btnGame[i].x = 10;
btnGame[i].y = i * (btnGame[i].height + 5) + 10;
btnGame[i].name = i;
mainMenu.mc.addChild(btnGame[i]);
btnGame[i].addEventListener(MouseEvent.CLICK, mainMenu.showHide);
btnGame[i].addEventListener(MouseEvent.CLICK, newGamePanel);
}
mainMenuResize();
stage.addEventListener(Event.RESIZE, stageResize);
}
private function mainMenuResize():void {
mainMenu.newHeight = stage.stageHeight;
}
private function bgResize():void {
var koef1 = init.bg._w / init.bg._h;
var koef2 = stage.stageWidth / stage.stageHeight;
if (koef2 <= koef1){
init.bg.scaleX = init.bg.scaleY = stage.stageHeight / init.bg._h;
} else {
init.bg.scaleX = init.bg.scaleY = stage.stageWidth / init.bg._w;
}
init.bg.x = stage.stageWidth / 2 - init.bg.width / 2;
init.bg.y = stage.stageHeight / 2 - init.bg.height / 2;
}
private function logoResize():void {
init.logo.scaleX = init.logo.scaleY = stage.stageHeight * 0.7 / init.logo._h;
init.logo.x = stage.stageWidth / 2 - init.logo.width / 2;
init.logo.y = stage.stageHeight / 2 - init.logo.height / 2;
}
private function stageResize(e:Event):void {
bgResize();
logoResize();
mainMenuResize();
}
}
}

Код AS3:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
import fl.transitions.Tween;
import fl.transitions.easing.Regular;
public class MainMenu extends Sprite {
private var isOpen:Boolean;
public function MainMenu() {
autoHide = true;
tab.addEventListener(MouseEvent.CLICK, showHide);
tab.addEventListener(MouseEvent.ROLL_OVER, tabRollOver);
tab.addEventListener(MouseEvent.ROLL_OUT, tabRollOut);
tab.buttonMode = true;
}
public function set autoHide(b:Boolean):void {
if (b){
x = -90;
isOpen = false;
tab.arrow.scaleX = 1;
} else {
x = 0;
isOpen = true;
tab.arrow.scaleX = -1;
}
}
public function set newHeight(h:int):void {
bg.height = h;
tab.y = h / 2 - tab.height / 2;
}
public function showHide(e:MouseEvent):void {
var _slideTo;
if (isOpen == false){
_slideTo = 0;
isOpen = true;
tab.arrow.scaleX = -1;
stage.addEventListener(Event.ENTER_FRAME, moveButtons);
} else {
_slideTo = -90;
isOpen = false;
tab.arrow.scaleX = 1;
stage.removeEventListener(Event.ENTER_FRAME, moveButtons);
}
new Tween(this, "x", Regular.easeOut, x, _slideTo, 0.5, true);
}
private function moveButtons(e:Event):void {
if (mc.height > stage.stageHeight){
var _perc = Math.round(stage.mouseY * 100 / stage.stageHeight);
mc.y -= Math.round((mc.y - ((mc.height - stage.stageHeight + 10) * _perc / -100))/4);
}
}
private function tabRollOver(e:MouseEvent):void {
new Tween(e.target, "alpha", Regular.easeOut, e.target.alpha, 0.6, 0.2, true);
}
private function tabRollOut(e:MouseEvent):void {
new Tween(e.target, "alpha", Regular.easeOut, e.target.alpha, 0.5, 0.2, true);
}
}
}