Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-02-2005, 23:13   #1 (permalink)
unomuse
 
Benutzerbild von muse
 
Registriert seit: Jan 2003
Ort: Im wunderschönen Hamburg
Beiträge: 117
Verzögerung in for-Schleife ohne EnterFrame

So richtig haben mich die Antworten auf vorhandene, ähnlich Themen nicht geholfen.

Also mein Problem; In einer for-Schleife, die per Klick ein Menü in einem anderen MC aufruft, soll eine eine if-Abfrage bzw. eine Bedingung stattfinden, die erst nach mehrmaligen durchlaufen der Schleife erfüllt wird. Ist diese bedingung nicht erfüllt, soll die schleife unterbrochen werden und neu aufgerufen werden. Ist die Bedingung erfüllt wird die schleife erstmalig ganz durlaufen. Danach erneut, so oft wie in der Schleife angegeben. Zudem sollte noch eine klein Verzögerung eingebaut werden, so dass die Bedingung sichtbar nach und nach erfüllt wird.
Ich hoffe das ist einigermaßen klar und noch mehr hoffe ich, dass es einen Lösungsansatz gibt;

Hier mein bisheriges Scrip:
PHP-Code:
on (release) {
    
newposition "-1600";
    
//----------------------------------------------------
    
portmenupunkt1 "Motion";
    
portmenupunkt2 "Print";
    
portmenupunkt3 "Web";
    
portmenupunkt4 "Fotos";
    
//----------------------------------------------------
    
for (i=1i<=4i++) {
        
_root.untermenuloader.attachMovie("untermenupunkt""upc"+ii);
        
_root.untermenuloader["upc"+i]._x 0;
        
_root.untermenuloader["upc"+i]._y i*30;
        
_root.untermenuloader["upc"+i].labelname.text _root["portmenupunkt"+i];
        
_root.untermenuloader["upc"+i].onRollOver = function() {
            
this.gotoAndStop(2);
        };
        
_root.untermenuloader["upc"+i].onRollOut = function() {
            
this.gotoAndStop(1);
        };
        
_root.untermenuloader["upc"+i].onDragOut = function() {
            
this.gotoAndStop(1);
        };
        
_root.untermenuloader["upc"+i].onPress = function() {
            
trace(this.labelname.text);
        };
        
    }

__________________
Da kann ja jeder aus'm Wald kommen und sagen, dass er der Förster ist.
muse ist offline   Mit Zitat antworten
Alt 10-02-2005, 03:04   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
deine "Bedingung" kennt hier ja niemand. das musst du schon konkreter definieren. lad mal deine fla hoch.
ActionScript:
  1. _root.button.onRelease = function() {
  2.     var inter = new Array();
  3.     spaeter = function (i, bez) {
  4.         clearInterval(inter[i-1]);
  5.         var upci = _root.untermenuloader.attachMovie("untermenupunkt", "upc"+i, i);
  6.         upci._x = 0;
  7.         upci._y = i*30;
  8.         upci.labelname.text = bez;
  9.         upci.onRollOver = function() {this.gotoAndStop(2);};
  10.         upci.onRollOut = function() {this.gotoAndStop(1);};
  11.         upci.onDragOut = function() {this.gotoAndStop(1);};
  12.         upci.onPress = function() {trace(this.labelname.text);};
  13.     };
  14.     inter.push(setInterval(spaeter, 300, 1, "Motion"));
  15.     inter.push(setInterval(spaeter, 600, 2, "Print"));
  16.     inter.push(setInterval(spaeter, 900, 3, "Web"));
  17.     inter.push(setInterval(spaeter, 1200, 4, "Fotos"));
  18. };
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (10-02-2005 um 03:21 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 10-02-2005, 09:27   #3 (permalink)
hobbyflasher
 
Benutzerbild von lasic+
 
Registriert seit: Jun 2003
Ort: NRW
Beiträge: 229
Wie schon gesagt, weißt man nicht so recht, was für Bediengung du meinst, aber wenn ich das richtig verstanden habe würde ich so ran gehen:

Du juckelst in deiner Schleife bis zu der besagten Bedingung durch, dann soll ja bei nicht Erfüllung der Bedingung die Schleife verlassen und neu gestartet werden. Also würde ich eine zusätzliche Funktion einbauen, die den erneuten Durchlauf veranlasst. Deine Schleife befindet sich auch innerhalb einer Funktion, also so ungefähr:

PHP-Code:
function juckeleInDerSchleife()
{
     for(var 
0Abbrechbedingungi++)
     {
           
//Hier die Anweisungen bis zu der prüffstelle
           
if(!BedingungErfüllt)
           {
           var 
si setInterval(geheNochMalInDieSchleife2000)
           break() 
           
//hier sind weitere Anweisungen, falls nicht rausgesprungen wird...
           
}
     }
}

function 
geheNochMalInDieSchleife()
{
     
clearInterval(si)
     
uckeleInDerSchleife()

Denkmal so sollte es funktionieren, vielleicht gibt es aber elegantere Lösung...

gruß lasic+
__________________
gruß lasic+
lasic+ ist offline   Mit Zitat antworten
Alt 10-02-2005, 12:35   #4 (permalink)
unomuse
 
Benutzerbild von muse
 
Registriert seit: Jan 2003
Ort: Im wunderschönen Hamburg
Beiträge: 117
Also es soll sich in der Schleife eine if-Abfrage befinden, die den attachten Clip in seinem container auf _x verschiebt, bis es einen bestimmten Punkt erreicht hat, dann soll erst der nächste Clip attached werden.
Der Intervall muss dann natürlich vorhanden sein, um die Verschiebung sichtbar zu machen.

Ich schau mir mal Eure Scripts an, sieht aber recht gut aus, vielen Dank.

So; dank Eurer Hilfe sieht mein Script jetzt so aus:
PHP-Code:
on (release) {
    
newposition "-1600";
    
//----------------------------------------------------
    
portmenupunkt1 "Motion";
    
portmenupunkt2 "Print";
    
portmenupunkt3 "Web";
    
portmenupunkt4 "Fotos";
    
//----------------------------------------------------
    
function startschleife() {
        for (
1i<=4i++) {
            var 
upci _root.untermenuloader.attachMovie("untermenupunkt""upc"+ii);
            
upci._x 100;
            
upci._y i*30;
            if (
upci._x=0) {
                
upci.labelname.text _root["portmenupunkt"+i];
                
upci.onRollOver = function() {
                    
this.gotoAndStop(2);
                };
                
upci.onRollOut = function() {
                    
this.gotoAndStop(1);
                };
                
upci.onDragOut = function() {
                    
this.gotoAndStop(1);
                };
                
upci.onPress = function() {
                    
trace(this.labelname.text);
                };
            } else {
                
upci._x += 5;
                var 
si setInterval(startschleifenochmal200);
                break;

            }
        }
    }
    function 
startschleifenochmal() {
        
clearInterval(si);
        
startschleife();
    }

Funktioniert leider aber noch nicht. On Release passiert gar nichts... außer [newposition = "-1600";] Aber das ist ja was anderes. :-)
__________________
Da kann ja jeder aus'm Wald kommen und sagen, dass er der Förster ist.

Geändert von muse (10-02-2005 um 13:34 Uhr)
muse ist offline   Mit Zitat antworten
Alt 10-02-2005, 15:42   #5 (permalink)
hobbyflasher
 
Benutzerbild von lasic+
 
Registriert seit: Jun 2003
Ort: NRW
Beiträge: 229
onRelease hasste in deinem Script auch nicht implementiert, liegt´s vielleicht daran?
__________________
gruß lasic+
lasic+ ist offline   Mit Zitat antworten
Alt 10-02-2005, 18:40   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
upci._x = 100;
...
if (upci._x=0)

da kannst du lange drauf warten:
du setzt upci._x auf 100 und fragst ob upci._x denn bitteschon 0 ist.
nö, ist es nicht.

und wenn überhaupt, dann so
if (upci._x==0)

tipp: probier mal den debugger aus. der ist wirklich gut. da kannst du schritt für schritt das programm ablaufen lassen und jeweils die inhalte der variablen einsehen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 10-02-2005, 20:07   #7 (permalink)
unomuse
 
Benutzerbild von muse
 
Registriert seit: Jan 2003
Ort: Im wunderschönen Hamburg
Beiträge: 117
Du hast natürlich recht, daher ja auch der else Befehl, wo das ganze dann sich solange auf _x verschiebt bis es 100 ist. Die Zeile upci._x += 5; müsste natürlich so aussehen: upci._x -= 5;. Und mit dem == und = komm ich idiotischer Weise immer durcheinander.

Aber was ist bitte mit Implementierung von onRelease gemeint???
Das Wort hab ich schon nachgeschlagen:
Implementierung (Informatik)
[lateinisch]

in der Softwareentwicklung die Phase, in der ein lauffähiges Programm erstellt wird, das im Eingabe- und Ausgabeverhalten den Spezifikationen des Entwurfs entspricht.

Versteh es trotzdem nicht; bin halt kein Informatiker, sonder nur ein dummer Designer.

Aber stimmt schon, es ist halt so, dass die Funktion bei OnRelease überhaupt gar nicht ausgeführt wird. Wie kann man es also implementieren?
__________________
Da kann ja jeder aus'm Wald kommen und sagen, dass er der Förster ist.

Geändert von muse (10-02-2005 um 20:31 Uhr)
muse ist offline   Mit Zitat antworten
Alt 11-02-2005, 11:19   #8 (permalink)
hobbyflasher
 
Benutzerbild von lasic+
 
Registriert seit: Jun 2003
Ort: NRW
Beiträge: 229
Hehe...

Ja Implementieren heißt einfach einbinden, reinnehmen, programmieren usw....

Du hasst es doch schon fast!

upci.onPress = function() {
trace(this.labelname.text);
};

für onRelease brauchste es auch nur hinschreiben:

upci.onRelease = function() {
//das was er dann machen muss...
};

gruß lasic+
__________________
gruß lasic+
lasic+ ist offline   Mit Zitat antworten
Alt 13-02-2005, 00:53   #9 (permalink)
unomuse
 
Benutzerbild von muse
 
Registriert seit: Jan 2003
Ort: Im wunderschönen Hamburg
Beiträge: 117
Das mit der Funktion hat leider nicht so geklappt, da er immer in eine Endlosschleife gesprungen ist. Hier aber die einfache Lösung:

PHP-Code:
on (release) {
    
newposition "-1600";
    
_root.upci.removeMovieClip();
    
//----------------------------------------------------
    
portmenupunkt1 "Motion";
    
portmenupunkt2 "Print";
    
portmenupunkt3 "Web";
    
portmenupunkt4 "Fotos";
    
//----------------------------------------------------
    
for (i=1i<=4i++) {
        var 
upci _root.untermenuloader.attachMovie("untermenupunkt""upc"+ii);
        
upci._x 110;
        
upci._y i*30;
        
upci.labelname.text _root["portmenupunkt"+i];
        
upci.onRollOver = function() {
            
this.gotoAndStop(2);
        };
        
upci.onRollOut = function() {
            
this.gotoAndStop(1);
        };
        
upci.onDragOut = function() {
            
this.gotoAndStop(1);
        };
        
upci.onPress = function() {
            
trace(this.labelname.text);
        };
        
upci.onEnterFrame = function() {
            if (
this._x>0) {
                
this._x this._x-10;
            }
        };
    }

__________________
Da kann ja jeder aus'm Wald kommen und sagen, dass er der Förster ist.
muse 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 14:37 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele