Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-01-2008, 18:00   #1 (permalink)
Slotentwickler
 
Benutzerbild von Yooda
 
Registriert seit: Mar 2004
Ort: Herten
Beiträge: 62
Wenden einer Karte

Servus,

ich habe mit einem "Codeschnipsel" schwierigkeiten, welcher mir das Leben ziemlich erleichtern würde. Der folgende Code soll simuliert das "Wenden" einers MC's.
Mein Problem ist selbst nach Änderungen, dass nicht mehrere Animationen parallel zueinander laufen können.

Zusätzlich erschwerend ist die Tatsache, dass diese Funktion nicht mit setTimeout aufgerufen werden kann. Das Ergebnis von setTimeout ist, dass ich lediglich das Endergebnis sehe, aber die Animation nicht.

Hat jemand von euch eine Idee, wie der Code verändert werden muss, damit es funktioniert?


Viele Grüße

David

PHP-Code:
//
// www.SeibsProgrammLaden.de
//
blatt1.onPress fBitteWenden;
blatt2.onPress fBitteWenden;
//
function fBitteWenden() {
    
delete this.onPress;
    
this.speed 2;
    
this.rot 0;
    
this.xscale=this._xscale;
    
this.wenden true;
    
this.onEnterFrame = function() {
        
this.rot+=this.speed;
        if (
this.wenden && this.rot>90) {
            
this.gotoAndStop(3-this._currentframe);
            
this.wenden false;
        }
        if (
this.rot>180) {
            
this._xscale this.xscale;
            
delete this.onEnterFrame;
            
this.onPress=fBitteWenden;
        }
        
this._xscale Math.abs(this.xscale*Math.cos(this.rot*Math.PI/180));
    };

Yooda ist offline   Mit Zitat antworten
Alt 02-01-2008, 18:31   #2 (permalink)
tux
flashback
 
Benutzerbild von tux
 
Registriert seit: Aug 2003
Beiträge: 529
wende dich doch einfach mal direkt an den programmierer, der
das script geschrieben hat, schliesslich isser hier im forum unterwegs...
;-)
tux ist offline   Mit Zitat antworten
Alt 02-01-2008, 19:12   #3 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
ja genau, du musst nach nem jungen Affen ausschau halten. :-)
Am besten mit frischen Bananen anlocken.
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net

Geändert von georgem (02-01-2008 um 19:17 Uhr)
georgem ist offline   Mit Zitat antworten
Alt 02-01-2008, 19:18   #4 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
In der Zwischenzeit mein Tip:

das this in der Funktion bezieht sich gar nicht auf den aufzurufenden mc.

Ich würde also die Funktion so umschreiben dass:

PHP-Code:
function fBitteWenden(mc) { 
    
delete mc.onPress
    
mc.speed 2
    
mc.rot 0
    
mc.xscale=mc._xscale
    
mc.wenden true
    
mc.onEnterFrame = function() { 
        
mc.rot+=mc.speed
        if (
mc.wenden && mc.rot>90) { 
            
mc.gotoAndStop(3-mc._currentframe); 
            
mc.wenden false
        } 
        if (
mc.rot>180) { 
            
mc._xscale mc.xscale
            
delete mc.onEnterFrame
            
mc.onPress=fBitteWenden(mc); 
        } 
        
mc._xscale Math.abs(mc.xscale*Math.cos(mc.rot*Math.PI/180)); 
    }; 

hier würde sich sowieso ein MovieClip.prototype lohnen
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 02-01-2008, 19:33   #5 (permalink)
Slotentwickler
 
Benutzerbild von Yooda
 
Registriert seit: Mar 2004
Ort: Herten
Beiträge: 62
Hi, erstmal danke für die Antworten
Alllllso..

Ich hatte die Funktion schon umgeschrieben, da das Clickevent nicht benötigt wird.

Es sah so aus:

PHP-Code:
function fBitteWenden(element_name) {  
    
element = eval("_root.mc_"+element_name);
    
element.speed 2;  
    
element.rot 0;  
    
element.xscale=element._xscale;  
    
element.wenden true;  
    
element.onEnterFrame = function() {  
        
element.rot+=element.speed;  
        if (
element.wenden && element.rot>90) {  
            
element.gotoAndStop(3-element._currentframe);  
            
element.wenden false;  
        }  
        if (
element.rot>180) {  
            
element._xscale element.xscale;  
            
delete element.onEnterFrame;  
        }  
        
element._xscale Math.abs(element.xscale*Math.cos(element.rot*Math.PI/180));  
    };  

Aufgerufen habe ich es so:

PHP-Code:
fBitteWenden("1");
fBitteWenden("2"); 
usw.

jedoch wurde das "Wenden" von mc_1 abgebrochen, und mc_2 wendete ununterbrochen, was mich halt ziemlich wundert...

Geändert von Yooda (02-01-2008 um 19:34 Uhr)
Yooda ist offline   Mit Zitat antworten
Alt 02-01-2008, 20:13   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von Yooda Beitrag anzeigen
..dass nicht mehrere Animationen parallel zueinander laufen können ... wie der Code verändert werden muss, damit es funktioniert?
ist nicht mehr das neueste, geht aber immer noch prächtig!?

Zitat:
Zitat von georgem Beitrag anzeigen
das this in der Funktion bezieht sich gar nicht auf den aufzurufenden mc.
ach, und worauf bezieht es sich dann?
Angehängte Dateien
Dateityp: zip wenden.zip (6,9 KB, 18x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (02-01-2008 um 20:27 Uhr) Grund: anhang ergänzt: die blätter hatten ja mal 2 seiten
hgseib ist offline   Mit Zitat antworten
Alt 02-01-2008, 20:17   #7 (permalink)
Slotentwickler
 
Benutzerbild von Yooda
 
Registriert seit: Mar 2004
Ort: Herten
Beiträge: 62
Na da werd ich doch mal versuchen, dieses Script zum laufen zu bekommen.

Vielen Dank schonmal


P.S. ich hoffe, dass ich mich bei Fragen an dich wenden darf


Viele Grüße

David
Yooda ist offline   Mit Zitat antworten
Alt 02-01-2008, 21:44   #8 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
Zitat:
Zitat von hgseib Beitrag anzeigen
ach, und worauf bezieht es sich dann?
kommt drauf an, in deinem Fall ist es einfach die Bühne oder der Ort wo die Funktion abgelegt ist.
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 02-01-2008, 21:57   #9 (permalink)
Slotentwickler
 
Benutzerbild von Yooda
 
Registriert seit: Mar 2004
Ort: Herten
Beiträge: 62
So.
Es ist vollbracht

So sieht das Ergebnis aus:

PHP-Code:
MovieClip.prototype.wenden =  function() {
    
this.speed 13;
    
this.rot 0;
    
this.xscale this._xscale;    

    
this.onEnterFrame = function() {
        
this.rot += this.speed;
        if (
this.wenden && this.rot>90) {
            
this.gotoAndStop(3-this._currentframe);
        }
        if (
this.rot>180) {
            
this._xscale this.xscale;
            
delete this.onEnterFrame;
        }
        
this._xscale Math.abs(this.xscale*Math.cos(this.rot*Math.PI/180));
    };
}

So sieht ein Aufruf aus:

  
setTimeout(drehen = function(){
                                
mc_1.wenden();
                                
mc_2.wenden();
                                
mc_3.wenden();                              
                              },
600); 

Vielen Dank nochmal
Yooda ist offline   Mit Zitat antworten
Alt 02-01-2008, 23:44   #10 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
yep!!

mit MovieClip.prototype kann das "this" erst so richtig glänzen.
Saubere Arbeit! :-)
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 03-01-2008, 03:03   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von georgem Beitrag anzeigen
kommt drauf an, in deinem Fall ist es einfach die Bühne oder der Ort wo die Funktion abgelegt ist.
nö, und sorry deine aussage ist falsch.
ein einfaches trace(this); hätte dir gezeigt, das alles vollkommen richtig ist ;-)

nach
blatt1.onPress = fBitteWenden;
blatt2.onPress = fBitteWenden;
ist der jeweilige eigentümer der funktion der, in den geklickt wird.


nur der vollständigkeit halber:
prototype ist ok, hab ich auch schon oft benützt, dennoch etwas altmodisch ;-)
alle geifern nach OOP (wobei ich sage: muss nicht immer sein)
eine andere lösung wäre z.b.
blatt1.wenden = fBitteWenden;
blatt1.wenden(); // so geht's auch
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (03-01-2008 um 03:08 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-01-2008, 07:42   #12 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
also getestet hatte ich

blatt1.fBitteWenden()

was blödsinn ist, ok, geb zu mein Fehler :-(

Wegen altmodischen prototype: naja, dies ist sogar noch in as3 eine gültige Vorgehensweise, was wohl für die Beliebtheit spricht. :-)
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 04-01-2008, 00:58   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von georgem Beitrag anzeigen
Wegen altmodischen prototype: naja, dies ist sogar noch in as3 eine gültige Vorgehensweise, was wohl für die Beliebtheit spricht. :-)
ganz mein reden ;-)

und mit den steinen die nach mir geworfen wurden, als ich genau dieses thema hier mal angesprochen hatte, hab ich schon drei häuser gebaut ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 23-04-2010, 10:17   #14 (permalink)
Neuer User
 
Registriert seit: Nov 2007
Beiträge: 20
Hallo Leute,

ich habe mir die zip aus dem Karten wenden Thread runter geladen und hab ein paar verständnis Probleme. Ich wollte euch deshalb fragen ob ihr mir das ein wenig erläutern könntet?

Wie kann ich die Karte schneller drehen lassen? Wenn ich nur das: this.speed = 2; auf z.B. this.speed = 20; verändern würde, dann würde sich nach jedem drehen die Karte verschmalern. Wodurch passiert das?

Und könnte ich im Script ändern, dass sich die Karte nicht um den Registrierungspunkt, sondern um den Nullpunkt dreht? Irgendwie bekomme ich den Registrierungspunkt nicht verschoben.

Danke und Liebe Grüße

Moritz
moritzXIII ist offline   Mit Zitat antworten
Alt 06-09-2011, 06:51   #15 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 50
wie kann ich andersrum drehen ?
lupe 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 13:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele