eine Objektinstanz (MC) mehrmals anzeigen

M

Matthias_Nordwig

Der Titel sagt es im Prinzip:

Ich möchte gern einen MC erzeugen, den ich mehrmals anzeige. Es soll jedoch jeweils die selbe Instanz sein(also nicht dublicateMovieClip oder sowas). Ist das überhaupt möglich?

Gruß

Matthias Nordwig
 
Hi,

Mehrmals und gleichzeitig? Geht nicht - eine Instanz ist per Definition eine Instanz.

Beschreib aber mal, was Du vorhast; vielleicht lässt sich das auch anders lösen.

Gruß
.
 
Hi!

Danke erstmal wieder für die schnelle Antwort.
Es geht um einen Würfel den ich drehen lassen möchte.
Hatte ich gestern shonmal in einem anderen Thread angerissen. ^^
Mein Problem ist, das ich für eine 3-dimensionale Drehung des Würfels, der in diesem
Falle aus Movieclips anstelle von gezeichneten Flächen besteht, die Movieclips asymetrisch verschieben muss. Beispiel für ein Quadrat:

- untere Kante nach links
- obere kante nach rechts

Das klappt auch soweit ganz gut. Wenn ich dem Würfel nun aber eine echte 3-D-Perspektive verpasse (was weiter entfernt ist muss kleiner sein), muss ich ungleichmäßig verschieben.
Beispiel:

- linke Kante des Films ist weiter hinten --> also kleiner als rechte Kante des Films

(auch: perspektivische asymetrische Verschiebung)

Da ich bisher noch keine Lösung in Flash gefunden habe, die das bewerkstelligen kann, habe ich an der Stelle getrickst und zeige pro Fläche 2 anstelle von einem Movieclip, die sich genau an 2 entgegengesetzten Punkten des jeweiligen Quadrates orientieren.
Diese beiden Movieclips werden dann mit einer Maske zueinanderhin hälftig abgeschnitten(also dreieckige Maske). Damit sieht das dann so aus als währe es ein MC(naja fast, bei der Drehung sieht man einen leichten Knick, das ginge zwar auch zu beheben, aber das währe 1. noch mehr Arbeit und währe 2. performancelastiger, da man dementsprechend noch mehr Movieclips bräuchte). was ich genau meine Ist auf meiner HP (in Signatur)
ersehbar. (dort einfach mal den Text markieren)

Hieraus wird dann viellicht auch mein Problem klar:

Ich muss andauernd alles synchronisieren. Das fängt schon mit so einfachen Dingen wie das Scrolling in Textboxen a und hört bei Dingen wie das Abschicken von Formularen auf.
Dafür währe es doch genial wenn man eine Movieclipinstanz mehrmals anzeigen könnte.

Nun mein momentan eigentliches Problem schaut wie folgt aus:

- Meine Texte habe ich zentral in einem Movieclip abgespeichert, um bei dynamisch befüllten Texten, die sich ja auch mitbewegen nur einmal die verwendete Schriftart laden zu müssen.

- Diese texte importiere ih dann in die jeweiligen MC's per runtimesharing

- der gesamte Pfad erhält stets Instanznamen

Nun das Problem:

Ich habe ein Skript, welches allen Textfeldern einen Listener "onScroller"
verpasst, welcher bei Ausführung dem Gegenstück des Textes im jeweils zugehörigen Movieclip die gleiche "scroll" eigenschaft verpasst die es selbst besitzt.
Zeige ich pro Movieclip nur einen Text an, klappt das auch wunderbar. Zeige ich mehrere Texte pro MC an, verlieren die Textfelder Ihre Instanznamen und bekommen zufällige Instanznamen von Flash zugeordnet. Damit lassen Sie sich aber nicht mehr mit dem jeweiligen Gegenstück matchen.

Bitte siehe Quellcodekommentar:

PHP:
function matchPerspective(obj1,obj2,cube) 
{ 
	
	for (var i in obj1) 
	{	
		if(typeof(obj1[i])=="movieclip"&&obj1[i]._name=="spacer")
		{
			obj1._xscale=cube.border/obj1[i]._width*100;
			obj1._yscale=cube.border/obj1[i]._height*100;
			obj2._xscale=cube.border/obj1[i]._width*100;
			obj2._yscale=cube.border/obj1[i]._height*100;
		}
		
		if (typeof(obj1[i].text)=="string"&&typeof(obj1[i])=="object"&&obj1[i]._name!=null)
		{ 
/*Beim ersten Durchlauf (anscheinend beim initialisieren der fct) hat er noch die Originalpfade, ab dem 2. jedoch ändert sich der Name von obj1[i] auf "Instanz..."
Und der Name von obj2[i] ebenfalls. Damit sind die Namen der beiden Objekte unterschiedlich und können mit diesem Skript nicht mehr gematcht werden
                                 */
				obj1[i].onScroller=function()
				{
					trace(obj1[i]);
   					obj2[i].scroll=obj1[i].scroll;
				}
				obj2[i].onScroller=function()
				{
					trace(obj2[i]);
   					obj1[i].scroll=obj2[i].scroll;
				}
		}
    		if (typeof(obj1[i]) == "movieclip") 
		{ 
			matchPerspective(obj1[i],obj2[i],cube); 
		}
	} 
}

Weiterhin: Das Abändern der Instanznamen der Texte, passiert nur dann, wenn ich per Runtimesharing mehr als einen Text im importierten Movieclip habe.

Die Frage: Warum ändert Flash die Instanznamen der Textfelder?
Wie lässt sich das verhindern? Oder: Lässt sich das generell sinnvoller gestalten?

*ui das ist jetzt aber viel geworden ^^

MfG


Matthias Nordwig
 
Zuletzt bearbeitet von einem Moderator:
Hi,

Die Frage: Warum ändert Flash die Instanznamen der Textfelder?
Hmm - kann ich mir nicht wirklich vorstellen. Hast Du dafür ein einfaches und nachvollziehbares Beispiel?

Generell wirst Du den Originalclip und seine "Ghost-Copy" wohl per Hand synchronisieren müssen. Ich würde das über ein flag erledigen, das beim Original direkte Änderungen zulässt und die Kopie veranlasst, alle Eigenschaftsänderungen des Originals zu übernehmen - sprich: das Original sollte alle seine Eigenschaften überwachen (z.B. mit watch) und an die Kopie (auf die eine Referenz existieren muss) sendet.

Allerding: Irgendwie habe ich das Gefühl, dass Dir für Dein Vorhaben mit Director und Shockwave3D besser gedient wäre als mit Flash. ^^

Gruß
.
 
Oh man wie krank:

Also: Flash ändert nicht die Instanznamen, sondern kommt in diesem Zusammenhang nicht damit klar, wenn mehrere Objekte in einem MC lungern. Irgendwie kommt dann etwas in der Reihenfolge durcheinander. *Grübel

Allerdings frage ich mich wie das zustandekommen kann:

_level0.page6.objo.mc.clip.container.text.hg3movieclip --> Man beachte "movieclip"
_level0.page6.obju.mc.clip.container.text.hg3

Wenn das der zugehörige Code ist:

PHP:
if (typeof(obj1[i].text)=="string"&&typeof(obj1[i])=="object"&&obj1[i]._name!=null)//das sollte doch movieclips eigentlich ausschließen
		{
				obj1[i].onScroller=function()
				{
					trace(obj1[i]+typeof(obj1[i]));
   					obj2[i].scroll=obj1[i].scroll;
				}
				obj2[i].onScroller=function()
				{
					trace(obj2[i]);
   					obj1[i].scroll=obj2[i].scroll;
				}
		}

Und wenn ich die äußere If-Anweisung weglasse, kommt es zum selben Resultat.
Irgendwie interessiert AS meine IF-Anweisung nicht sonderlich. ^^

Gruß

Matthias
 
Zuletzt bearbeitet von einem Moderator:
Hmm,

bei mir ist das auch der Fall (sprich: der Fehler lässt sich nicht reproduzieren). Worauf verweist bei Dir genau "obj1" und welche Objekte befinden sich darin?

Gruß
.
 
obj1 verweist auf:

_level0.page6.objo.mc.clip.container; Typ: movieclip

Objekte:

text; Typ: movieclip
text.loader; Typ: movieclip
text.message; Typ: object <<--- den müsste ausgeben wenn ich drin scrolle
text.text; Typ: object <<--- den müsste ausgeben wenn ich drin scrolle
text.button; Typ: object
text.betreff; Typ: object <<--- den müsste ausgeben wenn ich drin scrolle
text.email; Typ: object <<--- den müsste ausgeben wenn ich drin scrolle
text.name; Typ: object <<--- den müsste ausgeben wenn ich drin scrolle
text.hg3; Typ: movieclip
text.hg2; Typ: movieclip
text.hg1; Typ: movieclip
text.hg4; Typ: movieclip <<--- Den gibt er immer aus egal in welchem der angegebenen texte ich scrolle
email; Typ: movieclip
email.button; Typ: object
hgu; Typ: movieclip
hgo; Typ: movieclip
hgm; Typ: movieclip
hintergrund; Typ: movieclip
hintergrund.bild; Typ: movieclip
spacer; Typ: movieclip

obj2 verweist auf: _level0.page6.obju.mc.clip.container;

Der Rest ist gleich.
 
Zuletzt bearbeitet von einem Moderator:
So ordnet er zu:

_level0.page6.objo.mc.clip.container.text.messageobjectaussen
_level0.page6.objo.mc.clip.container.text.textobjectaussen
_level0.page6.objo.mc.clip.container.text.betreffobjectaussen
_level0.page6.objo.mc.clip.container.text.emailobjectaussen
_level0.page6.objo.mc.clip.container.text.nameobjectaussen
_level0.page6.objo.mc.clip.container.email.buttonobjectaussen

Mit diesem Code die Ausgabe:

PHP:
		if (typeof(obj1[i].text)=="string"&&typeof(obj1[i])=="object"&&obj1[i]._name!=null)
		{
				trace(obj1[i]+typeof(obj1[i])+"aussen");// hier gibt er ja bei listenersetzung aus
				obj1[i].onScroller=function()
				{
					trace(obj1[i]+typeof(obj1[i]));
   					obj2[i].scroll=obj1[i].scroll;
				}
				obj2[i].onScroller=function()
				{
					//trace(obj2[i]);
   					obj1[i].scroll=obj2[i].scroll;
				}
		}

So wie er da zuordnet soll es eigentlich auch sein.

Gruß

Matthias
 
Nenn diesen MC "text" mal anders. text ist ein reserviertes Wort (Eingenschaft eines Textfeldes) - das kann der Grund für den Fehler sein.

Gruß
.
 
Gesagt getan. Funktioniert trotzdem nicht.

*eine Möglichkeit währe jeden einzelnen Text in einen einzelnen MC zu packen aber dabei wird man ja krank

Wenn ich den Fehler richtig interpretiere, setzt er alle Listener stets auf das letzte Objekt im aktuellen MC. Ganz egal welches.
Gruß
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück