a) Wieso eine function in der function definieren? Stichwort Scope.
b) Was soll der Switch? Eine function aufrufen, wo klar ist, dass deren return null bzw NaN ist?
Mal wieder etwas getan in Sachen Flash und "schon" wieder nen fehler eingeheimst.
Das sollte passieren:
Eine Navigation mit mehreren Buttons. Es gibts einen Hintergrund der herausgefahren wird beim Klicken auf einen Button. Ist er vollständig ausgefahren, dann lädt er den Text. Ist er bereits herausgehfahren lädt er den Text natürlich auch. (der Text ist die trace() im Moment).
Das passiert:
1180: Aufruf einer möglicherweise undefinierten Methode btn.
Er hat hat Probleme von der switch auf den Wert der btn() zuzugreifen... Nur wie komm ich da anders hin? Solange die switch innerhalb der if - Fallunterscheidung ist gehts.PHP-Code:import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.utils.Timer;
var bgp_timer:Timer=new Timer(30);
this.pyronav_mc.newsp_btn.addEventListener (MouseEvent.CLICK,textabfrage);
//Abfrage auf den herausgefahren BG, wenn nicht, fährt er heraus und ladet dann den Text
//Wenn er schon heraussen ist, lädt er den Text direkt
function textabfrage (evt:MouseEvent) {
function btn (btn_str:String):String {
var btn_str:String = evt.target.name;
return btn_str;
}
if (this.rechtsbg_mc.x <= 150) {
bgp_timer.addEventListener (TimerEvent.TIMER,rechtsin);
bgp_timer.start ();
} else if (this.rechtsbg_mc.x >= 560) {
textladen ();
}
}
//Rechts BG reinfahren
function rechtsin (evt:TimerEvent) {
this.rechtsbg_mc.x+= 30;
if (this.rechtsbg_mc.x >= 560) {
bgp_timer.stop ();
textladen ();
}
}
//Text laden
function textladen () {
switch (btn(null)) { //hier hängt er
case "newsp_btn" :
trace ("News Pyro");
break;
}
}
Kann ich den Wert noch irgendwie anders vergleichen?
Liebe Grüße und vielen Dank im Vorraus!
Highhead
Bayern, jawoi des samma mia!
Bayern und des Bayrische Bier...
Bayern und des Reinheitsgebot.
Des is unser flüssiges Brot!
Bayern, jawoi des samma mia! (Haindling)
a) Wieso eine function in der function definieren? Stichwort Scope.
b) Was soll der Switch? Eine function aufrufen, wo klar ist, dass deren return null bzw NaN ist?
Danke dir erstmal, dass du dir des angeschaut hast!
a) Mit dem Scope hab ich immer wieder so meine Probleme...
ich will ja den Namen des MC's auf den geklickt wurde speichern (Global) und dann mit der switch vergleichen. Das wollte ich mit dem return bewirken. Dass ich durch diese Verschachtelung nicht Global durchkomme ist mir inzwischen auch klar geworden. Wie kann ich den
Namen des evt.target.name denn dann Global speichern, so dass ich dann egal wo ich bin draufzugreifen kann?
Habs jetzt nochmal anders probiert indem ich die Variable über textabfrage(evt:MouseEvent, btn_str:String):String{} und dann direkt definiere und zurückgebe, komm aber auf keinen grünen Zweig, weil ihm der Parameter vom evt. fehlt.
b) es kommt solange die switch innerhalb der Funktion textabfrage ist
kein null, sondern der Name wie es sein soll. Wenn ich die Variable btn_str dann aber global gespeichert habe dann würde es ja eigentlich auch erspart bleiben die Funktion nochmal aufzurufen.
Folglich ist mein Problem im Moment, dass ich ich die Variable btn_str gerne Global abfragbar hätte und krieg es aber nicht hin... Kannst du mir bitte bitte helfen?
Bayern, jawoi des samma mia!
Bayern und des Bayrische Bier...
Bayern und des Reinheitsgebot.
Des is unser flüssiges Brot!
Bayern, jawoi des samma mia! (Haindling)
Nun erahne ich was Du willst ... das switch (btn(null)) verwirrte mich ein wenig.
Hast Du denn mal die FLA da, dann muss man das nicht alles nachbauen, um es mal zu testen.
^^
Kein Problem hier ist die fla, hab das AS eingebunden, weils für mich dann einfacher ist zu bearbeiten...
das file dass den oberen Code enthält heißt pyronav.as
DivShare File - Ifp.zip
Passwort schick ich dir per pn
Bayern, jawoi des samma mia!
Bayern und des Bayrische Bier...
Bayern und des Reinheitsgebot.
Des is unser flüssiges Brot!
Bayern, jawoi des samma mia! (Haindling)
Dann halt so:
PHP-Code:import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.utils.Timer;
var bgp_timer:Timer=new Timer(30);
var btn_str:String = '';
this.pyronav_mc.newsp_btn.addEventListener (MouseEvent.CLICK,textabfrage);
this.pyronav_mc.conp_btn.addEventListener (MouseEvent.CLICK,textabfrage);
//Abfrage auf den herausgefahren BG, wenn nicht, fährt er heraus und ladet dann den Text
//Wenn er schon heraussen ist, lädt er den Text direkt
function textabfrage (evt:MouseEvent) {
btn_str = evt.target.name;
if (this.rechtsbg_mc.x <= 150) {
bgp_timer.addEventListener (TimerEvent.TIMER,rechtsin);
bgp_timer.start ();
} else if (this.rechtsbg_mc.x >= 560) {
textladen ();
}
}
//Rechts BG reinfahren
function rechtsin (evt:TimerEvent) {
this.rechtsbg_mc.x+= 30;
if (this.rechtsbg_mc.x >= 560) {
bgp_timer.stop ();
textladen ();
}
}
//Text laden
function textladen () {
switch (btn_str) {
case "newsp_btn" :
trace ("News Pyro");
break;
case "conp_btn":
trace("Kontakt Pyro");
break;
}
}
Perfekt danke,
heißt wenn ich eine Variable global definiere, kann ich trotz der lokalen zuweisung draufzugreifen.
Komisch, dann hab ich die ganze Zeit des irgendwie falsch gemacht... auch mit anderen Sachen ;-)
Vielen lieben Dank und ein schönes Weihnachten!!
Bayern, jawoi des samma mia!
Bayern und des Bayrische Bier...
Bayern und des Reinheitsgebot.
Des is unser flüssiges Brot!
Bayern, jawoi des samma mia! (Haindling)
Ich glaube Du hast das mit dem Scope noch nicht wirklich verinnerlicht. Warum sollte das nicht gehen?
Es ist halt eine Interaktion von lokalen mit globalen Vars.
Das einzige was Dir da Probleme bereiten kann, wenn Du Gültigkeitsbereiche einsetzt und damit den Zugang sperrst.
Dir natürlich auch eine besinnliche Zeit ... das Geschenk hast Du ja nun.![]()
Ja damit hab ich wirklich noch so meine Probleme.Ich glaube Du hast das mit dem Scope noch nicht wirklich verinnerlicht
ich hatte davor ein ähnliches Problem, nur hat mir da die return Methode geholfen. Was hier sichtbar nicht geklappt hat xD
Ja das habe ich allerdingsdas Geschenk hast Du ja nun.danke dir!
Bayern, jawoi des samma mia!
Bayern und des Bayrische Bier...
Bayern und des Reinheitsgebot.
Des is unser flüssiges Brot!
Bayern, jawoi des samma mia! (Haindling)
Um das Problem hier ggf mal zu beleuchten.
Du kannst keine Var in der function nutzen, da die Var ja durch ein Event definiert wird.
Nun kann man nicht einfach an einer anderen Stelle auf diese Var zugreifen, wenn diese rufende function gar kein Event auslöst.
Daher schreibt man mit dem Event in eine globale Var und nutzt diese an anderer Stelle.
Anders schaut es aus, wenn man nun eine "Hilfs-function" in einem Event verwendet, also das Event ein Parameter an eine function übergibt, diese anhand des Parameters etwas macht. Hier nutzt man dann ein return, um diese Veränderung wieder im Event zu verwenden.
Anbei dann mal ein Test.
Wenn man manuell als erstes klickt, bekommt man bei beiden keine richtige Ausgabe.
Klickt man nun btn1 und dann btn2, geben beide durch das Event die richtige Ausgabe.
Klickt man nun wieder manuell, dann sieht man, das die zweite Ausgabe richtig ist, dieses weil die globale Var verwendet wird. Diese Globale musste jedoch zuvor erst durch das Event von btn2 gefüllt werden. Die erste Ausgabe ist fehlerhaft, da hier die Definition der Var über das Event, welches ja nur der btn1 auslösen kann fehlt.
Hoffe das veranschaulicht das ganze ein wenig.
Danke dir, ich glaub jetzt hab ichs endlich/gültig kapiert![]()
Bayern, jawoi des samma mia!
Bayern und des Bayrische Bier...
Bayern und des Reinheitsgebot.
Des is unser flüssiges Brot!
Bayern, jawoi des samma mia! (Haindling)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)