Ein paar einfache Fragen die ich nicht beantwortet bekomme durch die Suchfunktion...

SonMiko

Erfahrenes Mitglied
Ich habe bereits die Suchfunktion verwucht, aber nichts dazu gefunden.
Vielleicht habe ich auch die falschen Argumente eingegeben, bzw. Suchbegriffe.

Ein paar, wahrscheinlich triviale Fragen.

Vor einiger Zeit habe ich einen Post gemacht wo ich das Ziel hatte eine XML Datei auszulesen um im Nachhinein in einem Textbereich dieselbe durchzuscrollen.
Nun habe ich letztendlich eine Funktion gefunden wie das ganze geht, bzw. gehen soll,
doch es klappt nicht.

Und ich habe die Fehler so eingegrenzt das ich zu folgenden Fragen komme.
Wenn ich einen MovieClip habe, also eine eigene SWF (nennen Wir sie "Hauptdatei"),
und lade in diesen Clip, oder in diese SWF Datei dann eine externe weitere SWF Datei,
wie wirkt sich das auf
a) Funktionen
b) Variablen
aus?

Wenn ich im Untermovieclip etwas im Hauptfilm in Gang setzen will, steuere ich dann mit _root die Hauptdatei an?

Im Quellcode den ich gefunden habe hies es man muss die Funktion im Ersten Frame des Hauptfilms eingeben, kann es sein, dass sie deswegen nicht funktioniert?
Muss man Funktionen immer im allerersten Frame des Root Films eingeben?
Wie adressiere ich Sie dann, und wo liegt bzw. endet der Gültigkeitsbereich einer Funktion?

Bin ein wenig verwirrt...

Der Code funktioniert mit setInterval, so dass in einem bestimmten Abstand nach betätigen eines RollOver Events, die Funktionen Rauf oder Runter Scrollen aktiviert und umgesetzt werden.

Der Code ist aber fehlerfrei, ich muss unbedingt die oberen Fragen beantwortet bekommen...

Ich danke Euch allen mal wieder


Besten Gruß,


Mike
 
Hi,

ohne Deinen Code zu sehen, ist es schwierig, Dir abschließend zu antworten.

Soweit erstmal:
wie wirkt sich das auf
a) Funktionen
b) Variablen
aus?
- Zunächst einmal garnicht. ;) Bzw. es kommt darauf an, wie und wo Du die zweite swf-Datei einlädst: So gibt es zwischen loadMovie und loadMovieNum signifikante Unterschiede (wirf mal einen Blick in die Referenz) und die Position/Adresse Deines Containers spielt auch eine Rolle.

Wenn ich im Untermovieclip etwas im Hauptfilm in Gang setzen will, steuere ich dann mit _root die Hauptdatei an?
- Ja, es sei denn, Du setzt im Unterfilm "lockroot = true;", dann verweist _root auf die Hauptzeitleiste des Unterfilms, wenn Du den Verweis dort anbringst.

Im Quellcode den ich gefunden habe hies es man muss die Funktion im Ersten Frame des Hauptfilms eingeben, kann es sein, dass sie deswegen nicht funktioniert?
- Das wage ich zu bezweifeln. Du kannst eigentlich von überall aus jede Funktion referenzieren, wenn der Frame mit der Deklaration schon einmal aufgerufen wurde. Verwendest Du die Zeitleiste auch zum Abspielen einer Animation, kann es Probleme geben, wenn der Frame mit den Deklarationen mehrmals aufgerufen wird - das hängt aber auch wieder von Deinem Setup ab.

Muss man Funktionen immer im allerersten Frame des Root Films eingeben?
- Nein. ;)

Wie adressiere ich Sie dann, und wo liegt bzw. endet der Gültigkeitsbereich einer Funktion?
- Wie gesagt; die korrekte Adressierung ergibt sich aus dem relativen Pfad vom Aufruf aus zur Funktionsdeklaration. Beispiel:

Funktion auf _root deklariert:
Code:
function foo() {
    trace("foo");
}
Aufruf aus einem Unterfilm (der sich direkt auf _root befindet):
Code:
_root.foo();

// oder mit relativem Pfad:
_parent.foo();

Der Code funktioniert mit setInterval ...
- Wie gesagt: es wäre praktisch, wenn Du den Code (besser: die gesamte fla) einmal posten würdest. Bei Funktionsaufrufen mit setInterval ist allerdings eine Besonderheit zu beachten:

Normalerweise bekommst Du mit "this" einen Verweis auf das Objekt, in dem sich die aufgerufene Funktion befinfet:
Code:
function foo() {
    trace(this); // Gibt Objektpfad aus
    _parent.machwas();
}

foo();
<-- die Funktion kann über den relativen Pfad "_parent" eine andere aufrufen. Nicht so mit setInterval: der Verweis auf das "eigene" Objekt geht dabei verloren und auch relatives Pfaden nach "oben" in der Objekthierarchie ist dann nicht mehr möglich:
Code:
function foo() {
    clearInterval(iv);
    trace(this); // Gibt "undefined" aus
    _parent.machwas(); // läuft ins leere, da "this" unbekannt ist
}

var iv = setInterval(foo, 1000);
Workaround: Lege eine Referenz auf die aktuelle Zeitleiste in einer Objektvariable ab:
Code:
var that = this;

function foo() {
    clearInterval(iv);
    trace(that); // gibt korrekten Objektpfad aus
    that._parent.machwas(); // funktioniert auch wieder
}

var iv = setInterval(foo, 1000);

Gruß
.
 
Hi Tobias,

danke mal wieder für deine vielen Antworten...

Hier die Funktion

Code:
var id_num;
function runter(){
	this.home2_txt.scroll++;
}
this.runter_btn.onRollOver= function(){
	id_num=setInterval(runter,100);
}

Diese befindet sich im ersten Schlüsselbild des MovieClips home2_mc.
Ich wollte dann anhand von zwei Buttons den Text home2_txt (Instance) home2_str (Variable) ansteuern (Wo liegt eigentlich der Unterschied zwischen der Variable und der Instance?).

Und diesen Code habe ich dem Button runter_btn Probeweise zugewiesen,
klar das ich dann oben im anderen Code die Zeilen "this.runter_btn...." entfehrnt habe.
Es war nur probeweise und hat aber leider auch nicht funktioniert...

Code:
on (rollOver) {
	function(){
	id_num=setInterval(runter,100);
}
}

Ist möglicherwiese der Code der Funktion falsch?

Gruß,

Mike
 
Zuletzt bearbeitet:
Hi,

wie gesagt: in Funktionen, die mit setInterval aufgerufen werden, ist "this" unbekannt. Du musst die Referenz auf Dein Objekt in einer anderen Variable (in meinem Beispiel "that") ablegen.

Dein zweiter Codeblock ist syntaktisch falsch: "on(rollOver) { }" ist per se schon eine Ereignisfunktion; das Schlüssselwort "function()" ist dort überflüssig.

Gruß
.
 
Lieber Herr Menzel...

Ich dreh durch, hehe da mache ich das überflüssige "function()" vom Button weg
und schon klappt es

Ist doch nicht zu fassen :-)...

Genie oder so?

Hehe....

Vielen Dank jedenfalls

Jetzt Scrollt es wie verrückt :-),
muss nun nur noch ein RollOut definieren damit es auch aufhört zu scrollen,
das ist aber kein Problem.


Ich bedanke mich also vielmals

Besten Gruß,


Mike
 
Hmmmm
doch alles nicht ganz so einfach wie es scheint...

Der aktuelle Code
Code:
stop();
var id_num:Number;

_root.home2_mc.rauf_btn.onRollOver = function(){
	id_num = setInterval(rauf, 100);
}
_root.home2_mc.rauf_btn.onRollOut = function(){
	clearInterval(id_num);
}
_root.home2_mc.runter_btn.onRollOver = function(){
	id_num = setIntervall(runter, 100);
}
_root.home2_mc.runter_btn.onRollOut = function(){
	clearInterval(id_num);
}

Nun ist zu beachten das gegebenenfalls die Funktionen für die Buttons wegfallen,
wenn ich diese direkt auf die Buttons lege wie oben besprochen,
also so

Code:
on (rollOver) {
	id_num=setInterval(rauf,100);
}
on (rollOut) {
	clearInterval(id_num);
}

bzw. so

Code:
on (rollOver) {
	id_num=setInterval(runter,100);
}
on (rollOut) {
	clearInterval(id_num);
}

Wenn ich den Code von oben nehme, also ohne den Buttons dann jeweils einen der beiden direkt zuzuweisen, dann bewegt sich der Text einfach garnicht :-/...
Wenn ich hingegen nur die Funktion des rauf und runterscrollens definiere und den Buttons noch die Funktionen einzeln gebe (also die beiden von oben) (man wie verwirrend), dann passiert erst garnichts, wenn ich dann auf "runter scrollen" fahre fährt der text wie wild runter und im selben augenblick (fast) wieder rauf, er flacker nur ganz schnell auf

Irgendetwas muss da also noch falsch sein...

Hast Du eine Idee?

P.S.: Mit clearInterval setze ich den Interval auf 0, das müsste eigentlich klappen, oder?


Besten Gruß,


Mike
 
Manno

Ich hasse diese UI Komponenten,
höhstens für Formulare würde ich die verwenden, aber ich hab ein gaanz schlechtes Gewissen mich einfach einer vorgefertigten Komponenten Libary zu bedienen :-(,
obwohl es auf anhieb mit einem Drag und Drop geklappt hat...

Würde viel lieber haben das meins funktioniert :-(...

Es will einfach nicht gehen auch sämtliche Methoden der "Adressierung", ob mit _root oder _parent...

Ich hab beinahe das Gefühl es ist hoffnungslos.

Vorhin ist der Text gescrollt, und nachdem ich dann den zweiten Button mit reingebracht habe gins nicht mehr.

Vielleicht eine weitere Variable hinzufügen... für den Interval... Gleich mal ausprobieren...
 
Ich habs geschafft...

Anhand von zwei Variablen.

Der Code

Code:
//Variablen für den Interval
var id_rauf_num:Number;
var id_runter_num:Number;

//Funktionsdefinitionen
function runter(){
	home2_txt.scroll++;
}
function rauf(){
	home2_txt.scroll--;
}

und der code für rauf

Code:
on (rollOver) {
	id_rauf_num=setInterval(rauf,100);
}
on (rollOut) {
	clearInterval(id_rauf_num);
}

bzw. runter

Code:
on (rollOver) {
	id_runter_num=setInterval(runter,100);
}
on (rollOut) {
	clearInterval(id_runter_num);
}

Verbesserungsvorschläge sind sehr willkommen
Sind zwei Variablen notwendig, und wieso?
Eigentlich ist doch das ClearInterval beim RollOut schon dazu da den Wert der ID wieder auf null zu setzen, oder?

Gruß,


Mike
 
Zurück