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 в браузер?
если я забыл что-то упомянуть, дайте мне знать, и я буду рад заполнить поля.
заранее спасибо за ваше время и терпение.