Textfelder skalieren

Übrigens Skyla, ist mir im Nachhinein noch eingefallen, dass wir zwei ganz schöne Blindfische sind... ;)
Gelangen da an die ulkigsten Grenzen von Flash mit implementierten EventHandlern im prototype-Objekt und vergessen dabei das simpelste der OOP:

Du hast ja bemängelt, dass auch _level0 als MC betroffen ist, und hast daher im enterFrame-Event dessen x-Position immer wieder auf 0 gesetzt.

Aber denk doch mal an folgendes:
_level0 findet diesen EventHandler im prototype-Objekt der instanzierenden Klasse!
Wo schaut es denn vorher nach und wie könnte man es demzufolge von der Aktion ausschließen? ;)

Geist,
sich selbst patschend
 
ja im constructor, ich weiss. aber methoden müssen in den prototype. wenn du sie in den constructor einbaust, nagelst du den cpu. Aber es war eh ein dummie beispiel.

hier kommt ein beispiel für eine sinnvolle anwendung dieser referenzierungsmöglichkeit:



PHP:
ASBroadcaster.initialize(MovieClip);
// MovieClip als Broadcaster
mc = _level0.createEmptyMovieClip("EHS", 7777);
// EH-Quelle
mc.onEnterFrame = function() {
	MovieClip.broadcastMessage("onEnterFrame1");
	// sende nachricht
	MovieClip.broadcastMessage("onEnterFrame2");
	// sende nachricht
};
function Superclass() {
	// wird durch registerClass(Superclass) aufgerufen
	MovieClip.addListener(this);
	// die Instanz von Superclass wird als 
}
//Listener beim Broadcaster MovieClip eingetrafen
Superclass.prototype.__proto__ = MovieClip.prototype;
// vererbung der mc-methoden
Superclass.prototype.mover = function() {
	// 1 Methode
	this._x += 15;
	if (this._x>500){
		this.removeMovieClip(); // sonst killts den cpu
	}
};
Superclass.prototype.scaler = function() {
	// 2 Methode; das spezielle hier: beide 
	this._xscale += 10;
	// methoden hören im printip auf das 
	this._yscale += 10;
	// gleiche onEnterFrame event, das aber als broadcastMessage
};
// ************************************************************
// hier sind unsere referenzierungen. diesmal lassen wir _level0
// aus dem spiel *gg*
Superclass.prototype.onEnterFrame1 = Superclass.prototype.scaler;
Superclass.prototype.onEnterFrame2 = Superclass.prototype.mover;
//**************************************************************

Object.registerClass("id", Superclass); // connect superclass mit movieclip class
// wichtig:jede Instanz, die mit attachMovie (oder auch anders) auf die Bühne
// gesetzt wird, wird der SuperClass zugeordnet (und nicht der MovieClip-Klasse)
// aufheben mit: Objekt.registerClass("linkage",null)


// wrapper/unbedeutend:
MovieClip.prototype.setRGB = function(col) {
	(new Color(this)).setRGB(col);
};


Setter = function () {
	_level0.counter;
	mc = _level0.attachMovie("id", "id"+_level0.counter, _level0.counter++);
	mc._x = 0;  // attachMovie ruft den constructor auf !!! warum ? weil die
	mc._y = 0;  // mc klassse über regiserClass mit Superclass verbunden wurde.
	mc.setRGB(Math.random()*177500);
};
setInterval(Setter, 200);


:eek:
 
Uh, das braucht Zeit, bis ich das durchgekaut habe, hab mich mit super und dem Broascaster noch nicht so angefreundet, sorry. :)

Was ich aber meinte:
Du willst _level0 aus dem Geschehen raushalten, es greift aber wie alle MCs auf das prototype-Objekt von MovieClip zu.
Setzt du nun für die Instanz _level0 allein einen eigenen enterFrame-Event, dann wird ja dieser befolgt statt der, welcher mit __proto__ später bei MovieClip gefunden werden würde...

Ein einfaches
PHP:
_level0.onEnterFrame = null;
hätte genügt und die Sache mit _level0 wäre einmalig für alle Zeiten gegessen gewesen. :)

Oder hab ich jetzt überlesen, dass du das bereits so aufgenommen hattest, bzw. hätte folgende Zeile
wenn du sie in den constructor einbaust, nagelst du den cpu.
als Antwort im voraus nehmen sollen?

Geist
der wo grad nicht ganz hinterherkommt
 
Zuletzt bearbeitet:
elegante lösung. wieder ein guter tip ! thx:)


nochmals wegen meinem script. das vorgehen ist von rob penner. schau es dir mal in ruhe an. hab auch ne weile gebraucht, bis ich es geschnallt habe und es anwenden konnte. ich finde es aber mit abstand das heisseste, was ich je in as gelernt habe.

gruss skyla:)
 
Werd' ich wohl machen, die Visualisierung gefällt mir ja bereits. ;)

Schon was neues bei der Inspektion der Skalierung des dynamischen Textfeldes herausgekommen?

Geist
 
ups, ist mir unters eis gerutscht. Ich wage es kaum zu sagen, glaube aber, dass es ein bug ist...nurganzleisesag

noch was zum _level0.onEnterFrame=null

ist ja das gleiche wie

_level0.onEnterFrame = undefined;

der eventHandler läuft aber in beiden fällen weiter und feuert
seine Events einfach ins Nirvana.

ich hätte es ja so geschrieben:

delete _level0.onEnterFrame

um den Event ganz zu beseitigen, was aber nicht klappt, wieso versteh ich nocht nicht ganz.
 
Die Erklärung dafür ist die einfachst denkbare. :)

Es existiert kein enterFrame auf dem MC, lediglich einer im prototype-Objekt, der später per __proto__-chain gefunden wird!

Denk mal drüber nach, der MC selbst besitzt keine Eigenschaft, die auf einen EventHandler verweist, lediglich dessen instanzgebende Klasse.

Also gibt's in dem MC auch nix zu löschen...

Easy thinking. :)

Geist
 

Neue Beiträge

Zurück