Variablen an Strings und Strings an / als Variablen übergeben

Lunata

Grünschnabel
(MX) Variablen an Strings und Strings an / als Variablen übergeben

Hallo, da bin ich wieder
- mit einer meiner Lieschen-Müller-Fragen….

Ich bin gerade dabei, diverse meiner Funktionen aufzuräumen und möchte sie nun universell einsetzbar gestalten.
Da ich im Scripten nicht gerade die große Leuchte bin…………..

kann mir jemand sagen wie man eine Variable in einen String verwandelt,
der dann seinerseits in einem anderen Vorgang wiederum zu einer Variablen werden soll?

Ich habe einen MC (später sollen das viel mehr sein), der seine eigene Farbe zugewiesen bekommt,
anhand dieser Zuweisung sollen die aufgerufenen Funktionen bestimmte Parameter ändern.


Auf diesem MC liegt folgendes Script:
PHP:
onClipEvent (load) {

myColor=1; // dieser Wert soll den Funktionen (s.u.) übergeben werden

// Farbe des MCs ändern:
// hier würde ich gerne den Wert von "myColor" einbinden (ZB:1), 
// damit nur ein einziger Wert geändert werden muß, nämlich "myColor"
_root.FarbfeldFarbe(this,myColor);// klappt NICHT  :-(((

// Position des MCs:
// hier würde ich gerne den Wert von "myColor" einbinden (zB:1), 
_root.FarbfeldPosition(this,myColor);// klappt NICHT  :-(((

}

// universell einsetzbar:
// klappt alles - leider nur mit dem Umweg über ein Hilfstextfeld!

onClipEvent (enterFrame) {
if(_root.hilfstextfeld.ausgabe == _root.colWahl2 + myColor) {
// Feld wird vergrößert:
_root.NeueBreite(this);} 
// Feld wird nicht vergrößert:
else {_root.AlteBreite(this);}
}


Auf der Hauptzeitleiste liegen die Funktionen:
PHP:
// Position des Farbfeldes soll mit dem entsprechendem Button übereinstimmen
 				//Übergabewert:(this,myColor)
function FarbfeldPosition (MC,MeineFarbe){
XPosition=MC + ".farbwahl.ColChangerbutts.auswahlbutt"+ MeineFarbe + "._x"
YPosition=MC + ".farbwahl.ColChangerbutts.auswahlbutt"+ MeineFarbe + "._y"
_x = XPosition + XVerschiebung;
_y = YPosition + YVerschiebung;
}

//--------------------------------------------------------------------------

// Farbe des MCs soll mit "myColor" des kleinen Feldes übereinstimmen:
        //Übergabewert:(this,myColor)
function FarbfeldFarbe (MC,MeineFarbe){
WelcheFarbe="BGFarbe" + MeineFarbe; // z.B. "BGFarbe1" das ist eine definierte Variable s.o.
// Farbzuweisung:
colorchanger = new Color(MC); 
colorchanger.setRGB("0x"+ WelcheFarbe); 
}

natürlich liegen die vordefinierten Farben und sonstige (umständliche) Funktionen auch in der Hauptzeitleiste.
Soweit klappt Alles wie gewünscht.

Ich wollte das Ganze straffen, leider fehlen mir die Syntaxkenntnisse.
Die Online Hilfe ist für mich kryptisch. Ich bin schon stolz, daß Alles (trotz „Aufblähung“) so läuft, wie gewünscht.

Falls mir jemand einen Tipp geben kann? Ich wäre dankbar.

Ich wünsche Euch einen schönen Abend,
Lunata
 
Zuletzt bearbeitet:
Bitte immer die Version angeben .... hab's downgeloadet, wollte es öffnen geht nicht da nur MX hier - war ein bisserl umsonst. ;)

Schuss ins Blaue ... zusammengesetzte Variablen in diesem Fall als Beispiel
PHP:
// auf der Hauptzeitleiste
setzmichzusammen=function(derda, einwert){
	eval(derda+einwert)._x=0//oder was du sonst tun willst
}

//dann zwei Movieclips auf der Hauptzeitleiste mit Instanznamen "mc" und "mc1"
//für mc
on(release){
	this.blubb="1"
	this._parent.setzmichzusammen(this, this.blubb)//ruft funktion für mc1 auf
}

Gruß
Rena
 
Zuletzt bearbeitet:
Liebe Rena,
sorry – ich war schon froh, alles fein aufgeschrieben zu haben….
Das mit der Version hab ich nicht gewußt – ich werde mich bessern.

Vielen Dank für Deinen himmelblauen „Testballon“.

Allerdings ist Liese-Müller noch immer etwas ratlos.
Ich habe versucht, meine Scripts nach Deiner Anleitung umzuräumen.
Sitze seit 11 Uhr an der Sache und grüble…..


Das mit „eval“ habe ich soweit hinbekommen, daß beim Veröffentlichen nicht immer die Riesen-Fehlermeldung erscheint,
jedoch fühlen sich die MCs (sie liegen verschachtelt in einer Verschachtelung) so gar nicht angesprochen….

Auf dem MC „Farbwahl1“ (verschachtelt in einer Verschachtelung) liegt das Script:
PHP:
onClipEvent (load) {
myColor=1; // ausschließlich dieser Wert soll den Funktionen übergeben werden
_root.MeineEigeneFarbe (myColor) // Farbe ändern - klappt nicht
_root.MeineEigenePosition(myColor) // Position ändern - klappt nicht
}
Auf dem Button liegt:
PHP:
 on (rollOver) {
myColor=1; // universell eisetzbar

// nicht universell eisetzbar:
myName=_root.NameFarbe1; // „NameFarbeXYZ“ Vars in der Hauptzeitleiste

if(_root.Farbwahl!=myColor){

// nicht universell eisetzbar weil myName= NameFarbe1 :
_root.FarbeInaktiv(myName) // Beschriftung dyn Feld

// nicht universell eisetzbar durch "(_parent.Farbwahl1":
_root.NeueBreite(_parent.Farbwahl1); // FarbFeld1 vergrößern:
}
else{
// nicht universell eisetzbar durch "myName":
_root.FarbeAktiv(myName)// Beschriftung dyn Feld
}}

Auf der Hauptzeitleiste liegen die Funktionen:

PHP:
 // Position des Farbfeldes soll mit dem entsprechendem Button übereinstimmen
 				// Übergabewert:(myColor)// zB "1"
function MeineEigenePosition (meineFarbe){ 

// Hilfsvariable erstellen - dieser String wird immer wieder gebraucht:
WelcherButton="this._parent.ColChangerbutts.auswahlbutt" ;

// Buttonposition ermitteln:
eval( WelcherButton + meineFarbe )._x = ButtonXposition ;
eval( WelcherButton + meineFarbe )._y = ButtonYposition ;

// Hilfsvariable erstellen - dieser String wird immer wieder gebraucht:
WelchesFarbfeld="this._parent.Farbwahl";
// Farbfeldposition ermitteln:
eval( WelchesFarbfeld + meineFarbe )._x = FarbfeldXposition ;
eval( WelchesFarbfeld + meineFarbe )._y = FarbfeldYposition ;

// neue Position des Farbfeldes
// es soll genau dort liegen wo sich der entsprechende Button befindet:
FarbfeldXposition = ButtonXposition ; // + XVerschiebung;
FarbfeldYposition = ButtonYposition ; // + YVerschiebung;
}
Wenn ich dem Ganzen sagen will, daß es jetzt eine Variable sein soll, wird immer bei der Veröffentlichung rumgemeckert: „Die linke Seite des Zuweisungsoperators muss eine Variable oder eine Eigenschaft sein“ obwohl ich der Meinung bin, Variablen zugewiesen zu haben…..

das Mecker – Script – auch auf der Hauptzeitleiste:
PHP:
 // eigene Farbe des Feldes soll mit dem zugewiesenen Wert "myColor" übereinstimmen
 				// Übergabewert:(myColor)// zB "1"
function MeineEigeneFarbe (meineFarbe){ 
Wer="this"
VorzeichenFarbe = "BGFarbe";  //  eigentlich: _root.BGFarbe1 
// meineFarbe ist der Übergabewert "myColor" // zB "1"

//----------------- hier kommt immer die Fehlermeldung
// 
eval(VorzeichenFarbe + meineFarbe) = MeineHintergrundFarbe 

// Farbe des Farbfeldes soll mit "myColor" des kleinen Feldes übereinstimmen:
// Farbzuweisung:
colorchanger = new Color(Wer); 
colorchanger.setRGB("0x"+ MeineHintergrundFarbe); 
}

Ziel der ganzen Übung:
Part1:
- einer von vielen MCs (in einer Verschachtelung)
bekommt diktatorisch eine Farbzuweisung
nun fragt er :
- wo ist mein zugehöriger Button (auch einer von vielen - in einer anderen Verschachtelung) ?
Reaktion:
- ich will genau die Eigenfarbe haben, die meiner Zuweisung entspricht
- ich will genau die Position ‚meines’ Buttons haben

Part2:
ein Button (von vielen) bekommt die selbe Farbzuweisung diktiert

er bestimmt beim Rollover,
- daß sein „Partner-MC“ sich größenverändern soll, wenn eine bestimmte Bedingung erfüllt ist
- dyn Textfelder entsprechend beschriftet werden

er bestimmt beim Release, daß, basierend auf der Farbzuweisung, verschiedene Aktionen durchgeführt werden.


Die MCs liegen deshalb verschachtelt, weil die MCs, in denen sie liegen, noch bestimmte Parameter (Farbe) übernehmen sollen…..

ist die Beschreibung etwas erhellender? Hmmmm ….. fürchte nicht…..

Die FLAs (MX 2004) hänge ich noch mal – mit aufrufender HTML - an, wenn man diese startet, sieht man was gemeint ist.

Vielen Dank,
und - schönen Abend noch,

Lunata
 
Zuletzt bearbeitet:
Hi,

ich habe das nurmal überflogen, aber
PHP:
eval(VorzeichenFarbe + meineFarbe) = MeineHintergrundFarbe;
ist keine gültige Konstruktion. Auf der linken Seite eines Zuweisungsblockes darf kein eval-Ausdruck stehen.
Versuch es mal mit:
PHP:
this[VorzeichenFarbe + meineFarbe] = MeineHintergrundFarbe;
Ausserdem habe ich den Verdacht, Du willst der Variable VorzeichenFarbe einen Wert zuweisen und nicht umgekehrt... dann musst Du die Anweisung natürlich auch umkehren:
PHP:
MeineHintergrundFarbe = eval(VorzeichenFarbe + meineFarbe);
// so rum ist eval erlaubt!

Gruß

EDIT @B. ein Posting tiefer: Na, wenn Du schon dabei bist, will ich mich mal raushalten - mit fehlt heute Abend sowieso die Ausdauer noch etwas zu zerpflücken. ;)
.
 
Zuletzt bearbeitet:
ich danke Euch schon mal für die Mühe,
werde das Ganze morgen - in ausgeschlafenem Zustand - eroieren .......

viele Grüße, Lunata
 
Hi Lunata -

da war für alle was dabei - Trunctations, Pfadprobleme, Übergabeprobleme und vieles mehr ! Ganz wichtig: Wenn du eine Variable übergiebst, dann ohne Anführungszeichen, sobald welche im Spiel sind, nimmt Flash den Parameter als String an.

Im Anhang die geänderten Dateien, ich habe nur die Farbwahl2.swf verändert, das andere File ist ja ähnlich gestrickt, und du kannst die Änderungen von 2 übernehmen.

Was ich gar nicht verstanden habe ist der Positionsänderungskomplex, es gab ja auch nirgends einen Aufruf zu den entsprechenden Funktionen, und ich wusste auch nicht, was die sollen. Das musst du mir noch mal erklären, dann kann ich auch den Teil anpassen.

Weiterhin lässt sich der ohnehin schon eingedampfte Scriptkomplex noch sehr verkleinern durch die Verwendung von Arrays und einer weiteren Abstraktionsschicht, wenn ich heute Zeit finde, poste ich noch eine Variante, wie ich sie scripten würde.

Vor allem die Verwendung dieser MASSE von Clipbasierten onEnterFrame Events ist sehr bedenklich, weil ressourcenfressend, und sehr unübersichtlich dazu.
Ach ja, sagte ich unübersichtlich ? Du musst ein Genie sein, um dich in dem Wust zurechtzufinden ;-] .....

Grüsse
B
 

Anhänge

  • Korrigiert.zip
    57,9 KB · Aufrufe: 23
Lieber Basileus,

"Danke" ist fast zu profan als Antwort für Deine Hilfe.

Habe gerade mal Dein Werk überflogen und stelle fest, daß es genau das ist, was ich auch geordnet haben wollte
jedoch - so gar nicht wußte wie das geht.

Jetzt habe ich eine prima Vorlage, an der ich meine weiteren Versuche entlanghangeln kann.

Das Zauberwort "Arreys", hab ich auch schon mal gehört....
Das soll so funktionieren wie eine Kiste, aus der man die benötigten Objekte gezielt rausholen kann.
Für sowas Schickes muß ich mich erst mal gründlich belesen, um rauszukriegen wie das funktioniert......

Zu dem Positionsänderungskomplex - der liegt in der Fla_1,
ich hatte die Problemstellungen extra gesplittet, damit man nicht so viel suchen muß..... (ha, ha)

Bei Fla_2 hatte ich genau diese Teile rausgenommen, da ging es um ein anderes Problem - das von Dir säähr elegant gelöst wurde. :)

.....Verwendung dieser MASSE von Clipbasierten onEnterFrame Events ist sehr bedenklich, weil ressourcenfressend, und sehr unübersichtlich dazu.
Hmmm.... Ich verstehe Deine Bedenken......

Jedoch: diese vielen Elemente sollen später immer abfragen welche übergeordnete Farbwahl gerade aktiviert ist
und - sich chamäleongleich daran anpassen.
Ich dachte, daß man das nur über "enterFrame" realisieren kann?
Wenn sich jeder MC selber "befragt" und korrigiert - spare ich mir die Pfade zu den ganzen MCs....


Schau bitte mal in die Fla_1 rein, da ist der geplante Rollover-Effekt drin.

Problemstellung dort:
a) MC soll seine Eigenfarbe erkennen und sich selber zuweisen,
b) Positionsänderung, damit man die Buttons später hin- und herräumen kann, ohne die dazugehörigen MCs neu positionieren zu müssen.

Meine Version klappt zwar ganz wie gewünscht, ist jedoch nicht "universell" einsetzbar.

Vielleicht will ich die Buttons irgendwann mal animieren, dann kleben die Farbfelder schön brav am Button. (wSwwim)

Aaaalso hab vielen Dank für Deine Mühe,
wenn ich mich revanchieren kann .......
meine Hausthemen sind bunt-und-schön-und-pingelig. (Swwim)
ich bin gerne behilflich.

Bis denne,
Lunata
 
Zuletzt bearbeitet:
Zurück