Nano Hash - криптовалюты, майнинг, программирование

AS3: Tween Lite: подростки останавливаются, не успев закончить?

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, чтобы мои фотографии скользили по сцене и выходили из нее.

движение, которое я пытаюсь достичь, выглядит примерно так:

  1. создать мой образ с правой стороны сцены
  2. поставьте галочку справа и остановитесь в центре сцены
  3. затем, когда я переключаюсь на следующее изображение, я хочу, чтобы текущее изображение вышло за пределы сцены слева
  4. быть удаленным
  5. создать новый слайд вне сцены справа
  6. и, наконец, отметьте галочку справа
  7. и т.д

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

если я забыл что-то упомянуть, дайте мне знать, и я буду рад заполнить поля.

заранее спасибо за ваше время и терпение.


  • Обещаю ... если на это не ответят к утру, я попробую. Но меня жена зовет спать :) 11.01.2011
  • заранее большое спасибо =) вы очень любезны. 11.01.2011

Ответы:


1

Вы пробовали killTweensOf () метод?

11.01.2011
  • простите меня, если это действительно очевидно, но как мне включить этот метод? Я пробовал убить подростков из containerSp перед анимацией, но это не помогло / не изменило мою проблему = (хотя спасибо за ваше предложение, любые предложения на этом этапе очень помогают =) 11.01.2011

  • 2

    Так что это вовсе не вина TweenLite. оказывается, размер загружаемых мной изображений не подходит для Интернета; какая вспышка не могла справиться (по крайней мере, на моем плече ..), поэтому даже после того, как я загрузил свои изображения в кеш и все такое, в тот момент, когда я добавил этого чудовища MovieClip на сцену, .swf зависал, пытаясь сохранить работающий. Таким образом, подростки действительно запускались правильно. Я обнаружил все это, сделав меньший прототип с размером 40x40 .gif и применив его к своему проекту.

    В качестве решения (помимо сжатия и оптимизации моих изображений) при загрузке нового изображения вместо добавления его на сцену ПОСЛЕ того, как предыдущее изображение было удалено (даже если оно уже загружено), я заставил его добавить фрагмент ролика на сцену как часть процесса загрузки, чтобы анимация не выглядела некрасиво при добавлении фрагмента ролика.

    Тем не менее, спасибо всем, кто просматривал мой код и / или ветку. Было бы неплохо сделать еще несколько предложений, но я понимаю, что этот пост был довольно большим и утомительным.

    13.01.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..