Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-06-2006, 11:55   #1 (permalink)
Neuer User
 
Benutzerbild von significant
 
Registriert seit: Jun 2006
Beiträge: 18
onEnterFrame in for-Schleife?

PHP-Code:
public function onRelease() {
        
stopDrag();
        
trace("x"this._name +" = "ElementXZentrum);
        
trace("y"this._name +" = "ElementYZentrum);
        var 
radius:Number _parent.selectKreis.xZentrum _parent.selectKreis._x;
        
getDistanzZumKreis();
        
        if (
distanceBetweenElementKreis radius) {
            
tracethis " hit circle" );
            
            
_parent.hitObjects.push(this);
            
trace_parent.hitObjects.length );
            
            
            for ( var 
zaehler 0zaehler _parent.hitObjects.lengthzaehler++ ) {
                var 
angle:Number = (360 _parent.hitObjects.length zaehler ) / 180 Math.PI;
                var 
newPosX:Number Math.cos(angle) * (radius) + _parent.selectKreis._x;
                var 
newPosY:Number Math.sin(angle) * (radius) + _parent.selectKreis._y;
            };
            
onEnterFrame = function() {
                
bewegungElemente(zaehlernewPosXnewPosY);
            };
        };
    };
    
    public function 
bewegungElemente(zaehlernewPosXnewPosY) {
        var 
tXDifferenz:Number _parent.hitObjects[zaehler]._x newPosX;
        var 
tYDifferenz:Number _parent.hitObjects[zaehler]._y newPosY;
        
        if(
_parent.hitObjects[zaehler]._x newPosX){
            
_parent.hitObjects[zaehler]._x -= tXDifferenz*0.1;
        };
        if(
_parent.hitObjects[zaehler]._x newPosX){
            
_parent.hitObjects[zaehler]._x -= tXDifferenz*0.1;
        };
                
        if(
_parent.hitObjects[zaehler]._y newPosY){
            
_parent.hitObjects[zaehler]._y -= tYDifferenz*0.1;
        };
        if(
_parent.hitObjects[zaehler]._y newPosY){
            
_parent.hitObjects[zaehler]._y -= tYDifferenz*0.1;
        };
    };
    
    public function 
onEnterFrame() {
        
ElementXZentrum this._x;
        
ElementYZentrum this._y;
    };
    
    public function 
getDistanzZumKreis() {
        
distanceBetweenElementKreis Math.sqrt(Math.pow(this._x _parent.selectKreis._x2)+Math.pow(this._y _parent.selectKreis._y2));
        
trace("distance "this._name +" Kreis = "distanceBetweenElementKreis);
        return 
distanceBetweenElementKreis;
    };
}; 
Dieses Skript befindet sich in einer Klasse.
Wenn ich die folgende for-Schlaufe ändere, funktioniert die Anordnung an der Kreislinie aller Objekte, die in den Kreises gezogen werden:

PHP-Code:
for ( var zaehler 0zaehler _parent.hitObjects.lengthzaehler++ ) {
                var 
angle:Number = (360 _parent.hitObjects.length zaehler ) / 180 Math.PI;
                
_parent.hitObjects[zaehler]._x Math.cos(angle) * (radius) + _parent.selectKreis._x;
                
_parent.hitObjects[zaehler]._y Math.sin(angle) * (radius) + _parent.selectKreis._y;
            };
        }; 
Mein Ziel war es nun, die Bewegung der einzelnen getroffenen Objekte, die in den Kreis gezogen werden zu kontrollieren. Dies klappt aber nur, wenn ich onEnterFrame = function() {bewegungElemente(zaehler, newPosX, newPosY);} ausserhalb der for-Schleife habe. Kann mir jemand erklären warum das so ist? Ich muss die Methode in der Schlaufe habe, da ich die variable zaehler brauche, um alle Objekte im Array anzusprechen, denn die bereits angeordneten Obejte müssen sich wiederum gleichmässig anordnen.

Kann mich jemand unterstützen? Was muss ich ändern damit die Bewegung funktioniert?

Gruss, sig.
Angehängte Grafiken
Dateityp: jpg Visual.jpg (12,3 KB, 11x aufgerufen)
significant ist offline   Mit Zitat antworten
Alt 11-06-2006, 13:11   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Wenn du das onEnterFrame in die for Schleife packst überschreibst du dieses immer wieder da dieses nur eine Funktion ausführen kann und nicht x beliebig viele.
Ausser man bastelt sich eine Funktion in der dann alle Funktionen aufgerufen werden die man braucht und weist diese dem onEnterFrame zu.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (11-06-2006 um 13:13 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 11-06-2006, 13:23   #3 (permalink)
Neuer User
 
Benutzerbild von significant
 
Registriert seit: Jun 2006
Beiträge: 18
hm... kann mir vorstellen, was du meinst.
kannst du mir hier im konkreten fall ein beispiel geben?
significant ist offline   Mit Zitat antworten
Alt 11-06-2006, 14:34   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Keine Ahnung so richtig habe ich dein Anliegen nicht verstanden.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 11-06-2006, 15:59   #5 (permalink)
Neuer User
 
Benutzerbild von significant
 
Registriert seit: Jun 2006
Beiträge: 18
So gehts, nur kann ich dann die Elemente nicht mehr dragen, da onEnterFrame immer noch läuft. deleten kann ich sie nicht, da sonst die for schlaufe noch nicht beendet ist.

PHP-Code:
public function onRelease() {
        
stopDrag();
        
trace("x"this._name +" = "ElementXZentrum);
        
trace("y"this._name +" = "ElementYZentrum);
        var 
radius:Number _parent.selectKreis.xZentrum _parent.selectKreis._x;
        
getDistanzZumKreis();
        
        if (
distanceBetweenElementKreis radius) {
            
tracethis " hit circle" );
            
            
_parent.hitObjects.push(this);
            
trace_parent.hitObjects.length );
            
            
onEnterFrame = function() {
                for ( var 
zaehler 0zaehler _parent.hitObjects.lengthzaehler++ ) {
                    var 
angle:Number = (360 _parent.hitObjects.length zaehler ) / 180 Math.PI;
                    var 
newPosX:Number Math.cos(angle) * (radius) + _parent.selectKreis._x;
                    var 
newPosY:Number Math.sin(angle) * (radius) + _parent.selectKreis._y;
                    var 
tXDifferenz:Number _parent.hitObjects[zaehler]._x newPosX;
                    var 
tYDifferenz:Number _parent.hitObjects[zaehler]._y newPosY;
                    if(
_parent.hitObjects[zaehler]._x newPosX){
                        
_parent.hitObjects[zaehler]._x -= tXDifferenz*0.2;
                    };
                    if(
_parent.hitObjects[zaehler]._x newPosX){
                        
_parent.hitObjects[zaehler]._x -= tXDifferenz*0.2;
                    };
                            
                    if(
_parent.hitObjects[zaehler]._y newPosY){
                        
_parent.hitObjects[zaehler]._y -= tYDifferenz*0.2;
                    };
                    if(
_parent.hitObjects[zaehler]._y newPosY){
                        
_parent.hitObjects[zaehler]._y -= tYDifferenz*0.2;
                    };
                };
            };
        };
    }; 
Ich habs jetzt noch auf diese Weise versucht:

PHP-Code:
public function onRelease() {
        
stopDrag();
        
trace("x"this._name +" = "ElementXZentrum);
        
trace("y"this._name +" = "ElementYZentrum);
        var 
radius:Number _parent.selectKreis.xZentrum _parent.selectKreis._x;
        
getDistanzZumKreis();
        
        if (
distanceBetweenElementKreis radius) {
            
tracethis " hit circle" );
            
            
_parent.hitObjects.push(this);
            
trace_parent.hitObjects.length );
            
            for ( var 
zaehler 0zaehler _parent.hitObjects.lengthzaehler++ ) {
                var 
angle:Number = (360 _parent.hitObjects.length zaehler ) / 180 Math.PI;
                var 
newPosX:Number Math.cos(angle) * (radius) + _parent.selectKreis._x;
                var 
newPosY:Number Math.sin(angle) * (radius) + _parent.selectKreis._y;
                var 
tXDifferenz:Number _parent.hitObjects[zaehler]._x newPosX;
                var 
tYDifferenz:Number _parent.hitObjects[zaehler]._y newPosY;
                while(
_parent.hitObjects[zaehler]._x newPosX){
                    
_parent.hitObjects[zaehler]._x -= tXDifferenz*0.2;
                };
                while(
_parent.hitObjects[zaehler]._x newPosX){
                    
_parent.hitObjects[zaehler]._x -= tXDifferenz*0.2;
                };
                        
                while(
_parent.hitObjects[zaehler]._y newPosY){
                    
_parent.hitObjects[zaehler]._y -= tYDifferenz*0.2;
                };
                while(
_parent.hitObjects[zaehler]._y newPosY){
                    
_parent.hitObjects[zaehler]._y -= tYDifferenz*0.2;
                };
            };
        };
}; 
Wenn ich das skript im player ausführe, stürzt es ab. Es liegt wohl an den while loops. Kann mir jemand sagen wieso?

Geändert von significant (11-06-2006 um 16:04 Uhr)
significant ist offline   Mit Zitat antworten
Alt 11-06-2006, 16:15   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Wenn du eine while Schleife in deiner for Schleife aufrufst läuft die while Schleife solange bis sie damit fertig ist und gibt dann das Kommando an deine for Schleife zurück.
Das was du da hast ist echt tödlich...

Vielleicht solltest du dich ersteinmal belesen was genauer diese Schleifen machen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 11-06-2006, 16:17   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Auch wenn ich nicht ganz kapiere, was das genau werden soll:
Kannst du deinen MCs nicht eine Kontroll-Variable mitgeben (bei onPress())? Also so in der Art, dass wenn er gedrückt wird z.B. "isDragged" auf true gesetzt wird und dann halt so:
PHP-Code:
if(_parent.hitObjects[zaehler]._x newPosX&&_parent.hitObjects[zaehler].isDragged==false){ 
Beim Release dann halt stopDrag() und isDragged == false.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 11-06-2006, 16:31   #8 (permalink)
Neuer User
 
Benutzerbild von significant
 
Registriert seit: Jun 2006
Beiträge: 18
ich habe erst vor 3 Monaten richtig mit as begonnen und zuvor noch nie programmiert. hab noch nich so den durchblick.

Mein Ziel ist es, die Objekte, die sich innerhalb eines Kreises befinden, resp. die im Array hitObjects sind, auf die Kreislinie zu bewegen und sie gleichmässig zu verteilen (wie im Anhang beim ersten Posting).
Wenn die Objekte von der Kreislinie weg und ausserhalb des Kreises zieht, soll das Objekt aus dem Array entfernt werden und bei onRelease stehen bleiben.

Klingt nach einer einfachen Geschichte, aber für mich bedeutet diese Aufgabe Nervenzusammenbruch an Nervenzusammenbruch.
significant ist offline   Mit Zitat antworten
Alt 11-06-2006, 16:43   #9 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Zitat:
Zitat von significant
Wenn die Objekte von der Kreislinie weg und ausserhalb des Kreises zieht, soll das Objekt aus dem Array entfernt werden und bei onRelease stehen bleiben.
Dafür steht ja gar nix im Script?! Kannst du vielleicht mal deine fla und die AS Datei(en) hochladen? So wird das sonst glaube ich nix.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 11-06-2006, 17:25   #10 (permalink)
Neuer User
 
Benutzerbild von significant
 
Registriert seit: Jun 2006
Beiträge: 18
hier sind die dateien.

Den Schritt, die Objekte aus dem Array zu entfernen, bin ich noch nicht angegangen.
Was ich auch noch versucht habe ist, den Abstand zwischen den Objekten immer gleich gross zu halten, bzw. den Radius des Auswahlkreises der Anzahl Objekte auf der Kreislinie anzupassen.
Ich hoffe, du kannst mein script lesen, ist sehr unordentlich strukturiert.

danke für deine unterstützung!
Angehängte Dateien
Dateityp: zip Archiv.zip (42,3 KB, 2x aufgerufen)

Geändert von significant (11-06-2006 um 17:39 Uhr)
significant 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:19 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele