(AS3) Attribut eines MC über actionScript ansprechen

hugo1981

Erfahrenes Mitglied
Hallo Leute,

ich weiss nicht was ich da verkehrt mache und werd verrückt :( Hab schon einiges Rumprobiert aber es hackt irgendwo.
Ich will ein Attribut eines MC mit einem Wert befüllen. Hier mein MC aus der Bühne (bzw. Bib)

mc_button (AS Name)
Code:
stop();
this.myTarget = "screen";
this.dropTo = ["screen", "canvas"];
this.assignedTo = [""];

Das MC wird auf der Bühne "dubliziert", indem es Auf ein Ziel gezogen wird. Das Ziel (auch ein Attribut kann ich abfragen.

Allerdings kommt die Fehlermeldung (s.u), wenn ich Attribute des "neuen" MC anspreche:
Code:
function iconMouseUp(iconEvent:MouseEvent) {
	iconEvent.target.stopDrag();
	iconEvent.target.alpha = 1;

	iconTargetName = iconEvent.target.myTarget;
	dropTargetName = iconEvent.target.dropTarget.parent.tiptext;

	var matching = iconTargetName.match(dropTargetName);

	trace(matching);
	var dropedTarget = getChildByName(iconEvent.target.dropTarget.parent.name);


	if (matching != null && iconEvent.target.dropTarget != null) {

		trace("placed correctly");
		if (iconEvent.target.name == "buttonMC") {
			actClip = iconEvent.target.name+buttonMCCounter;
			var mcNewButton:mc_button = new mc_button();

			mcNewButton.x = iconEvent.target.x;
			mcNewButton.y = iconEvent.target.y;
			addChild(mcNewButton);
			mcNewButton.name = actClip;
			trace(mcNewButton.myTarget);
			
			dropedTarget.assigned.push(actClip);
		
			
			var MyButton = getChildByName(mcNewButton.name);

//HIER gibt es eine Fehlermeldung
//TypeError: Error #1009: Cannot access a property or method of a null object reference.
			MyButton.assignedTo.push(dropedTarget.name);
			
			trace(dropedTarget.name + " + " + dropedTarget.assigned);
			//take back the initial IconMC
			iconEvent.target.x = StartX;
			iconEvent.target.y = StartY;
			buttonMCCounter ++;
		}
}}

Vielen Dank im Voras. Wo habe ich die Tomaten auf den Augen? Oder mach ich einen Denkfehler?

lg,
Hugo
 
trace(mcNewButton.myTarget);

gibt auch " undefined " aus. Obwohl es ja eigentlich efüllt ist. Refezenziere ich falsch?
 
Hallo,

hast du mal probiert die Member deines mc_button's wie folgt zu deklarieren:

Code:
var myTarget: String = "screen";
var dropTo: Array = ["screen", "canvas"];
var assignedTo: Array  =  [];

Gruss
 
Hi,
ja ich hatte das schonversucht.. Hab es natürlich auch nochmal versucht.. leider ohne Erfolg.

Mir ist jetzt aufgefallen, dass meine hinzugefügten MC keine MC sind, sondern nur "DisplayObject"; Ich kann diese auch nicht zu einen MC casten.

Obwohl die Elemente in der Bib schonMovieClips sind..

ich werd' echt verrückt.. Bleibe an so kleinigkeiten hängen :(
 
Hallo!

Mir ist jetzt aufgefallen, dass meine hinzugefügten MC keine MC sind, sondern nur "DisplayObject"; Ich kann diese auch nicht zu einen MC casten.

Guck dir mal die Rückgabetypen von addChild getChildByName usw. an.

Der Fehler passiert, weil du mit einer leeren Referenz operierst. Ich tippe mal auf dropedTarget. Was ich immer noch nicht ganz verstehe, ist, warum du, wie schon in deinem letzten Thread so versessen auf diese Instanz-Namen bist und nicht mit Referenzen arbeitest, zumal du die Namen zumindest anhand dieses Skripts bloss für Referenzierungen via getChildByName benutzt.
Code:
var dropedTarget = getChildByName(iconEvent.target.dropTarget.parent.name);

Die Referenz auf das gewünschte Objekt kriegst du auch so:
Code:
var dropedTarget: MovieClip = iconEvent.target.dropTarget.parent as MovieClip;
Dazu kommt, dass du so auch wirklich das Objekt als das referenzierst, was es ist und nicht als DisplayObject.
Ferner empfehle ich dir, strenger zu typisieren, dann fällt dir das Debugging auch leichter.

Gruss
 
Zuletzt bearbeitet:
es geht mir dabei darum, dass ich hier die zuwiesenen Ziele und Akzeptierten Objekte hole und abgleiche:

Code:
iconTargetName = iconEvent.target.myTarget;
	dropTargetName = iconEvent.target.dropTarget.parent.tiptext;
var matching = iconTargetName.match(dropTargetName);

if (matching != null &&...){

nur dann dürfen bestimmte Sachen gemacht werden, wie (wenn es klappen würde :) ) eine neue Instanz des mc_button auf meinem mc_screen platzieren.. Und die Arrays mit den Referenzen befüllen. Bei mc_screen1 (dropedTarget.assigned.push(actClip);) kann ich auch in das Array reinschreiben. Bei dem "neuen" MC: mc_button1 kann ich das leider nicht mehr.

Ich wolle da mit den Namen arbeiten, damit ich, falls ich später mehrere mc_button auf der Bühne habe, die auch unterscheiden kann.. bzw. gezielt heraussuchen kann.. Hab ich hier bereits einen Denkfehler?

Kann ich auch ohne den verschiedenen Instanzen eindeutige Namen zu geben gezielt MCs raussuchen uns z.B. mit dem verbunden MC bewegen, mit ihm löschen ec?

Kann es ein Problem dartellen dass die Instanznamen nicht identisch sind mit den MovieClip Namen in der Bib?

z.b. heisst die Classe meiner buttons: mc_button und der Insatanzname buttonMC

danke noch mal... :D
 

Neue Beiträge

Zurück