Как управлять глубиной в AS2 - PullRequest
0 голосов
/ 23 августа 2011

Как изменить фрагмент ролика (mainClip) в приведенном ниже коде AS2, чтобы он скрывался за всей графикой во флэш-файле?

Код указан ниже:

import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.geom.Point;
var imageBmp:BitmapData;


//setting the width of blind parts.
var widthB:Number = 40;
//setting the speed of blind parts movement;
var speedChart = 5;
//time to wait lo load another image
var nbSpeedPhoto:Number = 3000;
//Setting the minimum and maximum alpha for controls container and updating timer
var nbACMin:Number = 10;
var nbACMax:Number = 65;
var nbACUpd:Number = 40;
//Setting the minimum and maximum alpha for textField Container
var nbATMin:Number = 0;
var nbATMax:Number = 100;
var nbABMin:Number = 0;
var nbABMax:Number = 65;
//Setting the color for textField Container and font title
var nbATBackColor:Number = 0xD0C8CD;
var nbATFontColor:Number = 0x1F0010;
//Setting the right margin and top margin for controls
var nbRightMC:Number = 2;
var nbTopMC:Number = 2;
//Setting the bottom margin for title and its height
var nbBottomMT:Number = 5;
var nbHeightMT:Number = 50;
//Init Slider viewer
var bbPlay:Boolean = true;
//Setting left to right (1), right to left (2), paralell(3), or random(4) transition
var nbForm:Number = 4;
//if you don't choose parallel, setting the time lag.
var nbLag:Number = 1;


//initial state of FullScreen and AutoPlaying buttons
var bbFull:Boolean = false;
var bbAnimating:Boolean = false;
var bbEnableTitle:Boolean = false;
var bbActiveTitle:Boolean = false;
//setting the first image number to load
var imageNum:Number = 0;
var imageLast:Number;
//initial Photo
var nbPhoto:Number = 0;
//timer variables
var nbTimerNow:Number = 0;
var nbTimerNext:Number = nbSpeedPhoto;

/*********Arrays*******************/
//used for load XML values
var arPhotoPath:Array = new Array();
var arPhotoTitle:Array = new Array();

/**Setting listener to load images**********/
var listener:Object = new Object();
listener.onLoadComplete = function(imageClip:MovieClip):Void  {
    if (imageNum>0) {
        imageBmp = new BitmapData(mainClip["image"+imageLast]._width, mainClip["image"+imageLast]._height);
        imageBmp.draw(mainClip["image"+imageLast],new Matrix());
        var sqBmp:BitmapData;
        var x:Number = 0;
        var y:Number = 0;
        if (nbForm == 1 || nbForm == 2 || nbForm == 3) {
            form = nbForm;
        } else {
            rnd=Math.random()
            if (rnd>0.66) {
                form = 1;
            } else if (rnd>0.33){
                form = 2;
            }else{
                form = 3;
            }
        }

        for (var j:Number = 0; j<cols; j++) {
            x = j*widthB;
            if (j>=cols-1) {
                var ww = Stage.width-j*widthB;
            } else {
                var ww = widthB;
            }
            sqBmp = new BitmapData(ww, mcMask._height);
            sqBmp.copyPixels(imageBmp,new Rectangle(x, y, ww, mcMask._height),new Point(0, 0));
            cloneClip.createEmptyMovieClip("clone"+imageLast,cloneClip.getNextHighestDepth());
            makeSq(sqBmp,j,form);
        }
    }
    unloadMovie(mainClip["image"+imageLast]);
    bbAnimating = false;
    bbEnableTitle = true;
    nbTimerNext = getTimer()+nbSpeedPhoto;
    nbOK = 0;
    mcText.tfToolTip.text = "Photo "+String(nbPhoto+1)+" of "+String(xmlLength)+": "+arPhotoTitle[nbPhoto];
    mcText.tfToolTip.setTextFormat(myformat);
    imageNum++;
};

var imageLoader:MovieClipLoader = new MovieClipLoader();
imageLoader.addListener(listener);

/***Creating Squares*******/
function makeSq(sqBmp:BitmapData, jValue:Number, fvalue:Number):Void {
    var sqClip:MovieClip = cloneClip["clone"+imageLast].createEmptyMovieClip("sq"+jValue, cloneClip["clone"+imageLast].getNextHighestDepth());
    sqClip.attachBitmap(sqBmp,1);
    sqClip._x = jValue*widthB;

    if (fvalue == 1) {
        sqClip.lag = jValue;
    } else if(fvalue == 2) {
        sqClip.lag = cols-jValue;
    }else{
        sqClip.lag = 0;
    }

    sqClip.init = 0;

    sqClip.onEnterFrame = function() {
        if (this.init>this.lag) {
            this._xscale = this._xscale-speedChart;
        }
        this.init += nbLag;
        if (this._yscale<0 || this._xscale<0) {
            unloadMovie(this);
        }
    };
}

//setting the main movieclip and its clone.
//the clone will store the parts of the main image.
this.createEmptyMovieClip("mainClip",this.getNextHighestDepth());
this.createEmptyMovieClip("cloneClip",this.getNextHighestDepth());
this.createEmptyMovieClip("mcMask",this.getNextHighestDepth());
this.createEmptyMovieClip("mcMask2",this.getNextHighestDepth());
//Creating the text container and setting its properties
this.createEmptyMovieClip("mcText",this.getNextHighestDepth());
mcText.createEmptyMovieClip("mcBackText",this.getNextHighestDepth());
makeARectangle(mcText.mcBackText,0,Stage.height-nbBottomMT-nbHeightMT,Stage.width,nbHeightMT,nbATBackColor,100);
mcText.mcBackText._alpha = 0;
//Creating the mc text container
mcText.createTextField("tfToolTip",mcText.getNextHighestDepth(),0,Stage.height-nbBottomMT-nbHeightMT,Stage.width,nbHeightMT);
mcText.tfToolTip._alpha = 0;
//Creating the masks
var bmpMask:BitmapData = new BitmapData(Stage.width, Stage.height, false, 0xCCCCCC);
mcMask.attachBitmap(bmpMask,this.getNextHighestDepth());
mcMask2.attachBitmap(bmpMask,this.getNextHighestDepth());

mainClip.createEmptyMovieClip("image"+imageNum,this.getNextHighestDepth());

//setting the number of columns and files
var cols = Math.ceil(mcMask._width/widthB);

//setting the main and clone masks
mainClip.setMask(mcMask2);
cloneClip.setMask(mcMask);

//setting buttons behaviors
if (bbPlay) {
    mcControl.mcPausePlay.gotoAndStop("onPlay");
} else {
    mcControl.mcPausePlay.gotoAndStop("onPause");
}

mcControl.mcBackControls.onRollOver = mcControl.mcFull.onRollOver=mcControl.mcLast.onRollOver=mcControl.mcFirst.onRollOver=mcControl.mcPrevious.onRollOver=mcControl.mcPausePlay.onRollOver=mcControl.mcNext.onRollOver=function () {
    clearInterval(activeID);
    activeID = setInterval(activeControl, nbACUpd, true);
};

mcControl.mcBackControls.onRollOut = mcControl.mcFull.onRollOut=mcControl.mcLast.onRollOut=mcControl.mcFirst.onRollOut=mcControl.mcPrevious.onRollOut=mcControl.mcPausePlay.onRollOut=mcControl.mcNext.onRollOut=function () {
    clearInterval(activeID);
    activeID = setInterval(activeControl, nbACUpd, false);
};

function activeControl(bb:Boolean) {
    if (bb) {
        if (mcControl._alpha>=nbACMax) {
            clearInterval(activeID);
        } else {
            mcControl._alpha += 4;
        }
    } else {
        if (mcControl._alpha<nbACMin) {
            clearInterval(activeID);
        } else {
            mcControl._alpha -= 4;
        }
    }
}

mcControl.mcFull.onRelease = function() {
    if (bbFull) {
        Stage.displayState = "normal";
        this.gotoAndStop("onNormal");
        bbFull = false;
    } else {
        Stage.displayState = "fullScreen";
        this.gotoAndStop("onFull");
        bbFull = true;
    }
};

mcControl.mcPausePlay.onRelease = function() {
    if (bbPlay) {
        this.gotoAndStop("onPause");
        bbPlay = false;
        clearInterval(initPhoto);
    } else {
        if (!bbAnimating) {
            this.gotoAndStop("onPlay");
            bbPlay = true;
            clearInterval(initPhoto);
            initPhoto = setInterval(initPlay, 200);
        }
    }
};

mcControl.mcLast.onRelease = mcControl.mcFirst.onRelease=mcControl.mcPrevious.onRelease=mcControl.mcNext.onRelease=function () {
    if (bbAnimating == false) {
        clearInterval(initPhoto);
        mcControl.mcPausePlay.gotoAndStop("onPause");
        bbPlay = false;
        mcControl.mcPausePlay.onRelease;
        switch (this._name) {
            case "mcFirst" :
                nbPhoto = 0;
                break;
            case "mcPrevious" :
                nbPhoto = (xmlLength+nbPhoto-1)%xmlLength;
                break;
            case "mcNext" :
                nbPhoto = (nbPhoto+1)%xmlLength;
                break;
            case "mcLast" :
                nbPhoto = xmlLength-1;
                break;
            default :
                break;
        }
        imageLast = imageNum-1;
        mainClip.createEmptyMovieClip("image"+imageNum,mainClip.getNextHighestDepth());
        imageLoader.loadClip(arPhotoPath[nbPhoto],mainClip["image"+imageNum]);
        bbAnimating == true;
    }
};

/********************************/
function makeEnabled(bbEnable:Boolean) {
    with (mcControl) {
        mcPausePlay.enabled = bbEnable;
        mcLast.enabled = bbEnable;
        mcFirst.enabled = bbEnable;
        mcPrevious.enabled = bbEnable;
        mcNext.enabled = bbEnable;
    }
}

function makeVisible(bbVisible:Boolean) {
    with (mcControl) {
        mcPausePlay.enabled = bbVisible;
        mcLast.enabled = bbVisible;
        mcFirst.enabled = bbVisible;
        mcPrevious.enabled = bbVisible;
        mcNext.enabled = bbVisible;
    }
}

function initPlay() {
    if (bbAnimating == false) {
        if (bbPlay) {
            if (getTimer()>=nbTimerNext) {
                nbPhoto = (nbPhoto+1)%xmlLength;
                imageLast = imageNum-1;
                mainClip.createEmptyMovieClip("image"+imageNum,mainClip.getNextHighestDepth());
                imageLoader.loadClip(arPhotoPath[nbPhoto],mainClip["image"+imageNum]);
                bbAnimating = true;
                nbTimerNext += nbSpeedPhoto;
            }
        }
    }
}

var myformat:TextFormat = new TextFormat();
myformat.font = "myFont";
myformat.color = nbATFontColor;
myformat.size = 18;
mcText.tfToolTip.embedFonts = true;
mcText.tfToolTip.wordWrap = true;

mcText.onRollOver = function() {
    if (bbEnableTitle && !bbAnimating) {
        alphaTitle(nbATMax,nbABMax);
        bbActiveTitle = true;
    }
};

mcText.onRollOut = function() {
    if (bbEnableTitle) {
        alphaTitle(nbATMin,nbABMin);
        bbActiveTitle = false;
    }
};

function alphaTitle(nbTextAlpha:Number, nbBackAlpha) {
    mcText.mcBackText._alpha = nbBackAlpha;
    mcText.tfToolTip._alpha = nbTextAlpha;
    mcText.tfToolTip.setTextFormat(myformat);
}

//drawing a square
function makeARectangle(mc:MovieClip, x:Number, y:Number, w:Number, h:Number, nbColor:Number, nbAlpha:Number) {
    mc.lineStyle(1,nbColor,0);
    mc.beginFill(nbColor,nbAlpha);
    mc.moveTo(x,y);
    mc.lineTo(x+w,y);
    mc.lineTo(x+w,y+h);
    mc.lineTo(x,y+h);
    mc.lineTo(x,y);
    mc.endFill();
}

//for loading external XML
var xmlPhotos:XML = new XML();

xmlPhotos.onLoad = function() {
    xmlLength = this.firstChild.childNodes.length;
    for (var i:Number = 0; i<xmlLength; i++) {
        arPhotoPath[i] = (this.firstChild.childNodes[i].attributes.path);
        arPhotoTitle[i] = (this.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue);
    }
    imageLoader.loadClip(arPhotoPath[0],mainClip["image"+imageNum]);
    bbAnimating = true;
    initPhoto = setInterval(initPlay, 200);
};

/****Run XML*****************************************/
xmlPhotos.ignoreWhite = true;
xmlPhotos.load("photos.xml");

1 Ответ

0 голосов
/ 23 августа 2011
mainClip.swapDepths(1);

вам нужно убедиться, что все фрагменты ролика находятся на одном слое на временной шкале.

...