edit2: Ну, я понял, что случилось. ответил на мой собственный вопрос. * Лицо-ладонь * извините за эту трату пространства. (если вы столкнетесь с этим случайно, мое решение будет дано внизу)
Редактировать: Обдумывая мой код, пытаясь найти решение, я заметил, что когда мой .swf зависает во время анимации, анимационный видеоклип, который находится на сцене, также останавливает середину анимации. , что заставляет меня поверить, что мои проблемы могут быть связаны с загрузкой / созданием части кода моего кода В результате вот моя функция загрузки, чтобы дополнить код ниже:
function loadImage():void {
//if it's not already been loaded)
if ((currentImageNbr+1) > imagesLoaded || images.length == 0) {
imagesLoaded++;
tempPic = xmlData.album[albumNum].image[currentImageNbr].attribute("file");
tempCaption = xmlData.album[albumNum].image[currentImageNbr].attribute("caption");
trace("Loading: "+galleryPath+tempPic+" ("+tempCaption+")");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, catchIOError);
loader.load(new URLRequest(galleryPath+tempPic));
images[currentImageNbr] = loader;
paths[currentImageNbr] = tempPic;
captions[currentImageNbr] = tempCaption;
//loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onImgProgress); (not incorporated yet.)
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImgComplete);
}
else {
trace("image already loaded.");
onImgComplete(null);
}
}
Исходное сообщение:
Привет снова StackOverflow!
Мне может быть немного сложно объяснить мою проблему, поэтому, пожалуйста, пошутите, если у меня нет особого смысла ..
Я пытаюсь создать (достаточно простую) галерею изображений XML. XML и часть загрузки (по большей части) прекрасны и хороши. У меня проблемы с использованием TweenLite от Greensock, чтобы мои картинки скользили по сцене.
движение, которое я пытаюсь достичь, выглядит примерно так:
- создать мое изображение справа от сцены
- поверните направо и остановитесь в центре сцены
- затем, когда я переключаюсь на следующее изображение, я хочу, чтобы текущее изображение исчезло со сцены слева
- быть удаленным
- создать новый слайд за пределами сцены справа
- и, наконец, справа налево
- и т.д.
Мой код работает отлично, когда я запускаю его, используя Ctrl + Enter
во флэш-памяти, но когда я запускаю свой .swf в браузере, изображения часто не отображаются правильно.
они часто останавливаются, в середине "галочки" и не двигаются в течение нескольких секунд
затем они исчезают, и следующее изображение внезапно появляется в центре без какой-либо анимации.
У меня есть догадка (основанная на схожих проблемах, которые я прочитал), что моя проблема как-то связана со мной, по ошибке использующей ту же самую анимацию для следующей, и она получает мусор, собираемый в середине.
Я все еще очень плохо знаком с использованием TweenLite, поэтому не слишком хорошо знаю его входы и выходы ..
Возможно, я неправильно создаю своих подростков?
Вот некоторые соответствующие фрагменты кода, которые, я думаю, являются, вероятно, проблемными областями,
если вы заметите меня, используя неправильный метод или ошибку, пожалуйста, дайте мне знать, я все еще изучаю ActionScript 3:
несколько предпосылок (что может быть важно?)
import com.greensock.*;
import com.greensock.easing.*;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true);
загрузить мое изображение (есть больше внутри этой функции, но я не беспокоюсь об этой части)
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImgComplete);
После загрузки:
function onImgComplete(e:Event):void {
trace("loading done");
// check if containerSp exists on stage
// if it does, tween it, on complete- delete it and make a new one.
if (containerSp.stage) {
trace("containerSp already exists. removing, then making a fresh one");
// need to check if we're going forwards or backwards.
if (leftRight == "right") {
//forwards
trace("tweening out..");
moving = true;
TweenLite.to(containerSp, .5, {x:0-(containerSp.width+20), y:containerSp.y, ease:Quint.easeIn, onComplete:removeSprite});
}
else if (leftRight == "left") {
//backwards
trace("tweening out..");
moving = true;
TweenLite.to(containerSp, .5, {x:stage.stageWidth+20, y:containerSp.y, ease:Quint.easeIn, onComplete:removeSprite});
}
}
else {
trace("containerSp doesn't exist. making a fresh one.");
makeSprite();
}
}
Когда анимация закончится, удалите изображение и создайте новый спрайт:
function removeSprite():void {
moving = false;
stage.removeChild(containerSp);
makeSprite();
}
Сделать мое изображение внутри containerSp (который еще не был добавлен на сцену):
function makeSprite():void {
containerSp = new Sprite();
containerSp.graphics.beginFill(0xFF0000);
containerSp.graphics.drawRect( 0, 0, 0, 0);
trace("Done.");
trace("making image");
var bm:Bitmap = new Bitmap();
bm = Bitmap(images[currentImageNbr].content);
bm.smoothing = true;
containerSp.addChild(bm);
trace("done");
tweenIn();
}
установите позицию нашего containerSp, добавьте ее на сцену и добавьте в нее:
function tweenIn():void {
moving = true;
resizeHandler();
// need to check if we're going forwards or backwards.
if (leftRight == "right") {
//forwards
containerSp.y = (stage.stageHeight/2)-(containerSp.height/2)-(barHeight/2);
containerSp.x = stage.stageWidth;
}
else if (leftRight == "left") {
//backwards
containerSp.y = (stage.stageHeight/2)-(containerSp.height/2)-(barHeight/2);
containerSp.x = (0 - stage.stageWidth);
}
stage.addChild(containerSp);
trace("tweening in..");
TweenLite.to(containerSp, .5, {x:(stage.stageWidth/2)-(containerSp.width/2), y:(stage.stageHeight/2)-(containerSp.height/2)-(barHeight/2), ease:Quint.easeOut, onComplete:done});
}
function done():void {
trace("all done");
moving = false;
resizeHandler();
}
Использование resizeHandler
для изменения размера моей картинки при изменении размера окна.
он в основном устанавливает containerSp.width
, .height
, .x
и .y
относительно размера кадра.
переменная moving
предназначена для resizeHandler
, поэтому X
и Y
не устанавливаются в центр сцены, если изображение не движется.
Итак, чтобы подвести итог моего вопроса, почему подростки перестают работать, пока они не закончили, только когда я загружаю свой .swf в браузер?
если я забыл что-то упомянуть, пожалуйста, дайте мне знать, и я буду рад заполнить пробелы.
Заранее спасибо за ваше время и терпение.