Flashhilfe.de - Flash Community

Variablen aus zwei verschiedenen Funktionen an eine Dritte übergeben [Flash 8]

 


AntwortenRegistrieren Seite1  

wildie3#1
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

15.03.2011, 18:16

Hallo zusammen,

ich habe sicher ein Anfängerproblem, finde jedoch nirgends eine Lösung.
Ich möchte jeweils eine Variable aus Funktion A und Funktion B übergeben an Funktion C und diese dort verarbeiten.

ich versuche zur Zeit dieses Schema:

function A():Void {
    var v1:Number=1;
    this.C(v1);
}

function B():Void {
    var v2:Number=2;
    this.C(v2);
}

function C(v1:Number, v2:Number):Void {
    var v3:Number=v1+v2;
    trace(v3);
}

Ich würde also nach Aufruf der Funktionen die Ausgabe "3" erwarten.
Was mache ich falsch?
Geändert von wildie3 am 15.03.11 um 23:06 Uhr
RustyCake#2
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

15.03.2011, 18:38

Du sendest ja jehweils nur einen Parameter an die Funktion, erwarten tut die aber zwei!
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
RustyCake#3
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

15.03.2011, 18:49

Mach mal so was:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function A():Number {
      var v1:Number=1;
     return v1;
}
function B():Number {
      var v2:Number=2;
      return v2;
}
function C():Void {
      var v3:Number= A()+B();
      trace(v3);
}
C();
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
wildie3#4
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

15.03.2011, 22:07

Das sieht schon sehr gut aus, will aber nicht funktionieren.
Ich übergebe meine Variablen m1 und m2 an A und B.
Die trace()-Ausgabe von A und B bringt mir beide Werte einwandfrei.
Die Funktion C() rufe ich über einen Button auf mit: _root.C();
Ich bekomme aber weder den trace() von C angezeigt noch v3 in einem Textfeld, dem ich diese Variable zuordne.
Also irgendwo hab ich noch einen Fehler drin!


function A(m1:Number):Number {
      var v1:Number=m1;
      trace (v1);
      return v1;
}
function B(m2:Number):Number {
      var v2:Number=m2;
      trace (v2);
      return v2;
}
function C():Void {
      var v3:Number=B()+A();
      trace(v3);
    
}
springer#5
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

15.03.2011, 22:12

hi,
du musst aber schon noch parameter übergeben...

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function A(m1:Number):Number {
        var v1:Number=m1;
        trace (v1);
        return v1;
}
function B(m2:Number):Number {
        var v2:Number=m2;
        trace (v2);
        return v2;
}
function C():Void {
        var v3:Number=B(5)+A(3); // hier musst du auch was übergeben ;-)
      trace(v3);
     
}
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
wildie3#6
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

15.03.2011, 22:28

Wenn ich es so schreibe bekomme ich die 8 ausgegeben.
Ich möchte ja aber v1 und v2 aus meinen Funktionen A und B in C subtrahieren.(v1 von v2).

Wäre also:

function A(m1:Number):Number {
      var v1:Number=m1;
      return v1;
}
function B(m2:Number):Number {
      var v2:Number=m2;
      return v2;
}
function C():Void {
      var v3:Number=B(v2)-A(v1);
      trace(v3);
}


Geht aber so nicht. Bekomme immer ein NotaNumber (NaN) ausgegeben.
Meine m1 und m2 sind zwei gestoppte Zeiten in Millisekunden, welche auch als Number weitergegeben werden.
Irgendwas ist in C() noch falsch!
Geändert von wildie3 am 15.03.11 um 23:13 Uhr
wildie3#7
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

15.03.2011, 23:22

Habe gerade festgestellt, dass v1 und v2 als "undefined" in C() ankommt.
Das erklärt zwar die NaN-Meldung, warum die Variablen in A() und B() ordentlich angezeigt werden und in C() aber falsch ankommen, kann ich mir nicht erklären!!!
RustyCake#8
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

15.03.2011, 23:58

Du mußt das mit Zahlen aufrufen!!
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function A(m1:Number):Number {
        var v1:Number=m1;
        return v1;
}
function B(m2:Number):Number {
        var v2:Number=m2;
        return v2;
}
function C(a:Number,b:Number):Void {// a hat den wert 10, b hat 5
      var v3:Number=B(a)-A(b);
        trace(v3);// gibt 5
}
C(10,5);// 10 = a, 5 = b
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
springer#9
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

16.03.2011, 08:20

das kann so nicht gehen, wie gesagt musst du gültige werte übergeben

ActionScript:
1
2
3
4
function C():Void {
        var v3:Number=B(v2)-A(v1); // v2 und v1 gibts hier nicht, darum kriegst du auch NaN als ergebnis!!
      trace(v3);
}


was ich nicht begreife, ist warum du zwei funktionen (A+B) baust, obwohl die ja nur den wert durchreichen ?? dann kannst du ja direkt in C() subtrahieren....
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
wildie3#10
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

16.03.2011, 20:13

Kurze Erklärung!

was ich hier bastle, ist eine Stoppuhr, welche mir die Gesamtzeit anzeigt sowie bis zu 10 Rundenzeiten.
Hierbei habe ich eine Funktion die mir die Zeit via getTime() holt und in Stunden, Minuten, Sekunden und Hundertstel zerlegt.
Eine weitere dient zur Ausgabe an die Gesamtzeit-Anzeige.
Genau diese gibt die Gesamtzeit in Millisekunden an meine erste Variable weiter.

Nun habe ich für die Zwischenzeiten je eine Funktion, welche ebenfalls die Millisekunden erhalten und auf Button-Aktion diesen Wert stoppen. Dieser wird als Runde1 bis 10 ausgegeben.

Und hier das Problem:
Ich möchte ja nicht immer die Gesamtzeit angezeigt bekommen. Die Runde zwei z.B. ergibt sich ja aus der Differenz der gestoppten Gesamtzeit und der Zeit der Runde 1.

Da ich in den einzelnen Rundenfunktionen aber bereits die Millisekunden aus der Gesamtzeitfunktion übernehme, kann ich z.B. in Runde_2-Funktion nicht die Zeit von Runde 1 übernehmen, da diese aus einer anderen Funktion als die Millisekunden kommt.


Die letzten Lösungsvorschläge nützen mir also nicht viel, da meine Variablen dynamisch sind. Ich also keine Werte übergeben kann.
wildie3#11
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

16.03.2011, 20:23

Ich hatte auch schon die Idee, aus den Funktionen heraus globale Variablen mit meinen Werten zu füttern. Dies will aber auch nicht gelingen.
wildie3#12
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

16.03.2011, 20:56

Um es mal noch etwas zu verdeutlichen, hier die Funktionen um die es geht.
showTime1() für die Anzeige der ersten Rundenzeit und showTime2() für die Anzeige der zweiten Rundenzeit.
Beide übernehmen die milliseconds aus einer eigenen Übergabefunktion, welche wiederum aus der getTime-Funktion gespeißt wird und geben dise an die jeweilige Anzeige weiter. Gestoppt wird durch ein delete der Übergabefunktion. So erhalte ich in m1 bzw. m2 jeweils den letzten übergebenen Wert. Funzt soweit einwandfrei.
Nun will ich m1 aus showTime1() von m2 aus showTime2() subtrahieren.
Klingt eigentlich ganz einfach.

function showTime1(milliseconds:Number):Void {
             var m1:Number= milliseconds;

   var minutes:Number = m = Math.floor(milliseconds/1000/60);
   var seconds:Number = s = Math.floor(milliseconds/1000)-minutes*60;
   var deziseconds:Number = ds = Math.floor(milliseconds/10)-seconds*100-minutes*6000;
   var minutes_str:String = (m<10) ? "0"+m : m.toString();
   var seconds_str:String = (s<10) ? "0"+s : s.toString();
   var deziseconds_str:String = (ds<10) ? "0"+ds : ds.toString();
   this.hours_txt1.text="00";
   this.minutes_txt1.text=minutes_str;
   this.seconds_txt1.text=seconds_str;
   this.milli_txt1.text=deziseconds_str;
   
}
function showTime2(milliseconds:Number):Void {
   var m2:Number= milliseconds;
   var minutes:Number = m = Math.floor(milliseconds/1000/60);
   var seconds:Number = s = Math.floor(milliseconds/1000)-minutes*60;
   var deziseconds:Number = ds = Math.floor(milliseconds/10)-seconds*100-minutes*6000;
   var minutes_str:String = (m<10) ? "0"+m : m.toString();
   var seconds_str:String = (s<10) ? "0"+s : s.toString();
   var deziseconds_str:String = (ds<10) ? "0"+ds : ds.toString();
   this.hours_txt2.text="00";
   this.minutes_txt2.text=minutes_str;
   this.seconds_txt2.text=seconds_str;
   this.milli_txt2.text=deziseconds_str;
   
}

Nu mach ma !!!
wildie3#13
Benutzerbild von wildie3
Beiträge: 13
Registriert: Feb 2011

Themenautor/in

16.03.2011, 21:38

Habs jetzt doch mit globalen Variablen hinbekommen.
Ich hatte bestimmt einen Denkfehler beim ersten Versuch.
Jetzt wars ganz einfach.
Danke trotzdem an alle!

function showTime1(milliseconds:Number):Void {
    _global.m1= milliseconds;
    ...
function showTime2(milliseconds:Number):Void {
    _global.m2= milliseconds;
    ...

function C():Void {
   trace ("1."+m1+"  2."+m2);
   var c3:Number=(m2-m1);
   trace(c3);

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2020 Sebastian Wichmann - Flashhilfe.de