ugrás a tartalomhoz

Miért dobálja be random a MovieClip-eket a kódom?

Don Oden · 2010. Jún. 19. (Szo), 15.42
Sziasztok!

Egy hete próbálkozom az as3-mal, több kevesebb sikerrel. Írtam ezért egy kódot, ami libraryból beolvas néhány képet(:MovieClip), majd azoknak a pozíciionálásával cserélgetem őket. Ez addig tökéletesen működik amíg el nem kezdek játszadozni az addEventListener függvénnyel és a képek alfa csatornájával. A kód a következő:

import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.utils.setInterval;

/**
 * Library items, converted to MovieClips
 */
var image_movieclip_array:Array = [
    Image1,
    Image2,
    Image3
]

// Initialize vars
var stage_img_array:Array = new Array();
var prev_img:Number = 2;
var curr_img:Number = 0;


for(var i = 0; i < image_movieclip_array.length; i++){
    var img:MovieClip = new image_movieclip_array[i]();
    addChild(img);
    stage_img_array.push(img);

    if(i < 2)
        stage_img_array[i].alpha = 0;
}

function imageRotator()
{
    this.swapChildren(stage_img_array[prev_img],stage_img_array[curr_img])

    stage_img_array[prev_img].addEventListener(Event.ENTER_FRAME, fl_FadeSymbolOut);
    stage_img_array[curr_img].addEventListener(Event.ENTER_FRAME, fl_FadeSymbolIn);

    /**
     * This branch sets the next lineup
     */
    if(this.curr_img <= 2)
    {
        this.prev_img = this.curr_img;
        this.curr_img += 1;
    }

    if(this.curr_img == 2)
        this.curr_img = 0;
}

var interval = setInterval(imageRotator,5000);


function fl_FadeSymbolIn(event:Event):void
{
    stage_img_array[curr_img].alpha += 0.02;
    if(stage_img_array[curr_img].alpha >= 1)
    {
        stage_img_array[curr_img].removeEventListener(Event.ENTER_FRAME, fl_FadeSymbolIn);
    }
}

function fl_FadeSymbolOut(event:Event):void
{
    stage_img_array[prev_img].alpha -= 0.02;
    if(stage_img_array[prev_img].alpha <= 0)
    {
        stage_img_array[prev_img].removeEventListener(Event.ENTER_FRAME, fl_FadeSymbolOut);
    }
}


A tünet amit generál, nagyon furcsa (legalábbis számomra) ugyanis az első és a második kép közti átmenetet szépen létrehozza, majd egyet kihagy (tehát dupla annyi ideig marad benn) utána bevillan az a kép aminek a 2. cserénél jönnie kellett volna, amit aztán felülír az a kép, ami normálisan jelenik meg. Ezután pedig a korábbihoz képest, őrült sebességgel váltakoznak a képek.

(Ha valaki szeretne pár potyapontot so-n: http://stackoverflow.com/questions/3075497/why-does-my-movieclips-load-random)
 
1

Tipp

Endyl · 2010. Jún. 20. (V), 12.52
Az eseményfigyelőkben használd az event.currentTarget-et. Mert miután az "imageRotator()" fgv-ben rárakod az egyes MC-kre a figyelőket, utána megváltoztatod a rájuk hivatkozást szolgáló "prev_img" és "curr_img" változókat.

[off]
Itt-ott hiányzik amúgy pontosvessző.
A stackoverflow-s link meg "nem működik".
[/off]