Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-09-2007, 13:59   #1 (permalink)
FlashWorker
 
Benutzerbild von designerfreak
 
Registriert seit: Jan 2006
Ort: Großröhrsdorf (bei Dresden)
Beiträge: 13
Question clearInterval() mögliche Fehler?

Hi Leute,

Bin grade dabei eine dynamische Blendenfunction zu programmieren, nur hab ich da ein paar kleiner Probleme.

Undzwar erklär ich es mal kurz. Es wird ein Bild geladen und eingeblendet. Wenn ich ein anderes Bild mir anzeigen lassen will soll das Vorhergehende Bild ausgeblendet werden und das neue eingeblendet.

Für Ein- und Ausblendeffekte habe ich zwei Funktionen. beim ersten einblenden macht clearInterval() seinen Job, nur wenn ich ein Interval in einem Interval erzeuge, welches gerade gestoppt wurde, kann das neue Interval nicht mehr gelöscht werden, d.h. clearInterval() wird quasi gesagt ignoriert.

egal ob ich
PHP-Code:
clearInterval_global.intervalId);
// oder
clearIntervalthis ); 
mache.

Selbst wenn ich die IDs der Intervalle an einen MC hänge wird das löschen ignoriert. Es läuft dann immer der Einblendeffekt weiter und ich kann ihn nicht stoppen.

Hier mal Code:
PHP-Code:
/**************************************************************************************************
 *        Bild dem Slider hinzufügen
 *        @sPath:        lokaler Pfad
 *        @nYPos:    Y-Position des Bildes
 *        @sImgID:    Bildindex als String(Bsp.  001)
 *        @nWidth:    Breite
 *        @nHeight:    Höhe
 *        @sFormat:    Bildformat 
 *        @nPicNr:    Bildnummer
 **************************************************************************************************/
function addImagesPath:StringnYPos:NumbersImgID:StringnWidth:NumbernHeight:NumbersFormat:StringnPicNr:Number )
{    
    
// Beim ersten Aufrunf, laden des ersten Bildes
    
if( sImgID == "001" )
         
imageBlendEffectsPathsImgID);
    
    
// verkürtztes Bildformat
    
sFormat == "horizontal"
        
?    sFormatBg "H"
        
:    sFormatBg "V";

    
// Erstellen des Slider an der Seite
    
mcImg = new MovieClip();
    
mcImg this.createEmptyMovieClip"img" sImgIDthis.getNextHighestDepth() );
    
    
mcImg.mcImgBg mcImg.createEmptyMovieClip"bg");
    
mcImg.mcImgBg.attachMovie"bg" sFormatBg "bg");
    
mcImg.mcImage mcImg.createEmptyMovieClip"img");
    
    
sImgPath sPath "/mini/" sImgID ".jpg";
    
mcImg.mcImage.loadMoviesImgPath );
    
    
mcImg._x 0;
    
mcImg._y _global.nNextYValue;
    
mcImg.mcImgBg._x = -1;
    
mcImg.mcImgBg._y = - 1;
    
    
// Klickfunktion für jedes Bild
    
mcImg.onRelease = function()
    {
         
imageBlendEffectsPathsImgID3);
    }
    
    
//trace(_global.nNextYValue);
    
_global.nNextYValue += new Number(nHeight) + 10;
}

/**************************************************************************************************
 *        Blenden-Effect zwischen den einzelnen Großen Bildern
 *        @sPath:        lokaler Pfad
 *        @sImgID:    Bildindex als String(Bsp.  001)
 *        @nOption:    1 = einblenden; 2 = ausblenden; 3 = ein- und ausblenden
 **************************************************************************************************/
function imageBlendEffectsPath:StringsImgID:StringnOption)
{
    if( 
nOption == )
    {
        
clearInterval_root.bigImage_mc.ivBlendOut );
        
_root.bigImage_mc._alpha 0;
        
loadBigImagesPathsImgID );
        
_global.ivBlendIn setIntervalblendIn_global.nBlendSpeed );
    }
    else if( 
nOption == )
    {
        
clearInterval_root.bigImage_mc.ivBlendIn );
        
_root.bigImage_mc._alpha 100;
        
_global.ivBlendOut setIntervalblendOut_global.nBlendSpeedsPathsImgID);
        
loadBigImagesPathsImgID );
    }
    else if( 
nOption == )
    {
        
_global.ivBlendOut setIntervalblendOut_global.nBlendSpeedsPathsImgID);
    }
}
/***** Ausblenden *****/
function blendOutsPath:StringsImgID:StringnOption:Number )
{
    
trace"AUS: " _root.bigImage_mc._alpha )
    
_root.bigImage_mc._alpha 0
        
?    _root.bigImage_mc._alpha -= 10
        
:    clearInterval_global.ivBlendOut );
    if( 
nOption == && _root.bigImage_mc._alpha <= )
    {
        
loadBigImagesPathsImgID );
        
_global.ivBlendIn setIntervalblendIn_global.nBlendSpeed );
    }
}
/***** Einblenden *****/
function blendIn()
{
    
trace"EIN: " _root.bigImage_mc._alpha )
    if( 
_root.bigImage_mc._alpha <= 100 )
        
_root.bigImage_mc._alpha += 10
    
else
    {
        
trace"Interval löschen: " _global.ivBlendIn)
        
clearInterval_global.ivBlendIn );
        
clearIntervalthis );
    }
}
/**************************************************************************************************
 *        laden des Großen Bildes
 *        @sPath:        lokaler Pfad
 *        @sImgID:    Bildindex als String(Bsp.  001)
 **************************************************************************************************/
function loadBigImagesPath:StringsImgID:String )
{
    
sImageFile sPath "/" sImgID ".jpg";
    
nImgID = new NumbersImgID ) - 1;
    
    
// Aus einem gegebenen Array wird ein Wert entnommen (Bildformat)
    
aChilds[nImgID].width == 128
        
?    sBigForm "H"
        
:    sBigForm "V";
        
    
// MovieClip erstellen für Bild und Hitergrund
    
mcBg _root.bigImage_mc.createEmptyMovieClip"BackGround_mc");
    
mcImage _root.bigImage_mc.createEmptyMovieClip"Image_mc");
    
// Hintergrund zeichnen
    
unloadMovie(mcImage);
    
mcImage.loadMoviesImageFile );
    
// Bildhintergrund (Rahmen)
    
mcBg.beginFill0x000000100 );
    
mcBg.moveTo( -1, -);
    if( 
sBigForm == "H" )
    {
        
mcBg.lineTo641, -);
        
mcBg.lineTo641481 );
    }
    else
    {
        
mcBg.lineTo361, -);
        
mcBg.lineTo361481 );
    }
    
mcBg.lineTo( -1481 );
    
mcBg.lineTo( -1, -);        
    
mcBg.endFill();
}

// Erstellen der Bilder im Slider
for( nI:Number 0nI aChilds.lengthnI++ )
{
    
addImage_global.galeriePath0aChilds[nI].idaChilds[nI].widthaChilds[nI].heightaChilds[nI].formatnI );

Danke schon mal im Vorraus....
designerfreak ist offline   Mit Zitat antworten
Alt 11-09-2007, 14:41   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
Zitat:
Zitat von designerfreak Beitrag anzeigen
Undzwar erklär ich es mal kurz.
wow, das dürfte die kürzeste erklärung gewesen sein, die ich je gesehen habe ;-)
leider habe ich nicht so viel zeit deinen kurzen betrag komplett zu lesen.

generell:
- es schadet nichts, vorher ein altes si zu unterbrechen
- immer darauf achten, das keine si-nummer überschrieben wird, bevor das alte si nicht gestoppt wurde.
clearInterval(si);
si=setInterval(...
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 11-09-2007, 17:55   #3 (permalink)
FlashWorker
 
Benutzerbild von designerfreak
 
Registriert seit: Jan 2006
Ort: Großröhrsdorf (bei Dresden)
Beiträge: 13
Das Tolle ist ja ich lasse mir die si auch anzeigen. Alsi als si wird 4 angezeigt, nur kann ich machen was ich will.
Woher weiß ich eigentlich welche Intervalls noch laufen und welche nicht?

Es wird für jedes Interval einen neue si produziert, halt eine fortlaufende Nummer wie bei SQL "autoincrement".

Bei einer Galerie wäre das schon sehr aufwendig die ganzen si zu prüfen ob sie vorhanden sind oder nicht und sie alle zu "clearen".

Aber ch werde es mal ausprobieren, danke dir für deine schnelle Antwort.
designerfreak ist offline   Mit Zitat antworten
Alt 11-09-2007, 20:25   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ein setInterval behält immer seine nummer. könnte man als prozessnummer verstehen. das hintereinander in eine variable unterschiedliche setInterval-nummern gespeichert werden und dadurch intervalls übrig bleiben ist ein klassiker. sowas passiert z.b. auch wenn ein frame verlassen und ein objekt gelöscht wird: das setInterval läuft weiter.

da hilft wirklich nur gewissenhaft jedes erzeugte interval auch wirklich zu löschen.
- das mit dem generell vorher löschen, bevor ein neuer interval gestartet wird hilft
- ansonsten alle intervall-nummern in ein array packen:

http://www.seibsprogrammladen.de/fra...thmen/Interval
mehrere Interval's
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele