Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-06-2004, 13:06   #1 (permalink)
Neuer User
 
Benutzerbild von schnabelmax
 
Registriert seit: Oct 2003
Ort: im garten frankreichs
Beiträge: 76
duplicateMovieClip (initMovieClip) wie geht das?

hallo Forum,

bin mit diesem Thema in der Flash MX Rubrik leider mit 0 Antworten durchgerutscht, darum jetzt doppelpost in der hoffnung das mir hier jemand hilft. Sorry!

Schon seit langem versuche ich es mit den verschiedensten klammerstellungen und habe es nie hinbekommen. Jetzt brauche ich jemanden der lust hat mich da aufzuklären.


movieClip.prototype.initButtons = function (pClip, pTitel) {
pClip.titel = pTitel;
pClip.onRollOver = function () {
trace (pTitel);
}
}

for (var j=1; j<5; j++) {
this.duplicateMovieClip("menue_btn"+j, j, _root.initButtons(this._parent["menue_btn"+j], _root.pTitels[j]));
}


Es geht mir also um den InitMovieClip Aufruf in der duplicateMovieClip Fn...

Warum versagt mein prototype hier?
In der referenz steht das es sich bei [,objectInit] um ein object handeln muss, ist mein protoype etwa kein object?
Wie sieht die richtige notation für das ansprechen des prototypen aus und wie übergebe ich ihm die parameter?
__________________
gruß schnabelmax
schnabelmax ist offline   Mit Zitat antworten
Alt 28-06-2004, 14:51   #2 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi, das ist ja alles sehr wirsch was du erzählst…

Wenn du einen Button auf die Bühne instanzieren möchtest, solltest du am besten attachMovie() verwenden und in der Library ein entsprechendes Buttonmodell mit Linkage ID versehen. createEmptyMovieClip erzeugt doch nur einen leeren MC auf der Bühne, was soll man denn da klicken können?

Und das du soweit bist, das du da dynamisch Linien und Textfelder einfügen kannst, glaube ich nicht.

Wenn du den Namen, Titel etc. mitgeben möchtest, solltest du den MC in der Lib auch mit ensprechender Komponentendefinition versehen.


Insgesamt weiß ich nicht was du so genau möchtest, aber ich habe dir mal dazu eine Fla gebastelt, dort kann du erkennen wie man Parameter übergibt, wie man einen Prototype korrekt definiert usw.… hoffentlich hilft dir das weiter.

Demnächst bette bitte deine Codesnips in vB Code ein und versuche, dein Posting deutlicher zu formulieren.


Hier der Code:

PHP-Code:
//Actionscript 1.0
MovieClip.prototype.initButton=function(nameleveltitelxy
    {
    var 
newClip=this.attachMovie('button',name,level);
    
newClip.titel=titel;
    
newClip.name=name;
    
newClip._x=x;
    
newClip._y=y;
    
newClip.onRollOver=function()
        {
        
trace (this.titel);
        }
    }


//Erstellen der Buttons
for (var j=1j<5j++) 
    {
    
this.initButton('button'+j,j,'titel'+j,100+(40*j),100+(40*j));
    } 

Anbei die Fla.


Liebe Grüße

Yves
Angehängte Dateien
Dateityp: zip Archive.zip (3,2 KB, 10x aufgerufen)
  Mit Zitat antworten
Alt 28-06-2004, 15:43   #3 (permalink)
Neuer User
 
Benutzerbild von schnabelmax
 
Registriert seit: Oct 2003
Ort: im garten frankreichs
Beiträge: 76
danke für die Antwort, aber:

movieClip.duplicateMovieClip(neuerName, tiefe [,objetInit])
das steht in der Referenz.

Mir geht es jetzt nur um den Teil [,objetInit].

Mein script oben sollte nur verdeutlichen, dass ich an Stelle X, Object X duplizieren, und über [,objetInit] zu initialisieren versuche, sprich mit parametern zu versehen (_x, _y, text ect.).

Ich möchte gerne wissen ob ich [,objetInit] richtig interpretiere und wenn ja, suche ich nach einem konkreten Anwendungsbeispiel da ich weder in meinen bücher, noch im Forum eines finde.


Hoffentlich ist das weniger wirsch.
__________________
gruß schnabelmax
schnabelmax ist offline   Mit Zitat antworten
Alt 28-06-2004, 17:17   #4 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
initObjekt Ein Objekt mit Eigenschaften, die für den neu angehängten Movieclip übernommen werden sollen. Dieser Parameter ermöglicht es dynamisch erstellten Movieclips, Clip-Parameter zu empfangen. Wenn initObjekt kein Objekt ist, wird dieser Parameter ignoriert. Alle Eigenschaften von initObjekt werden in die neue Instanz kopiert. Die mit initObjekt angegebenen Eigenschaften stehen der Konstruktorfunktion zur Verfügung. Dieser Parameter ist optional.
Ergo

PHP-Code:
//Actionscript 1.0

//Definition des Prototypes
MovieClip.prototype.initButton=function(linkage,name,depth,titel,x,y
    {
      
//Definition des Objektes newClip und dessen Eigenschaften
    
var newClip={};
    
newClip.titel=titel;
    
newClip.name=name;
    
newClip._x=x;
    
newClip._y=y;
    
newClip.onRollOver=function()
        {
        
trace (this.titel);
        }
      
//AttachMovie mit „~ObjectInit Parameter“ 'newClip'
    
this.attachMovie(linkage,name,depth,newClip);
    }

//Test
for (var j=1j<5j++) 
    {
      
//Aufrufen des Prototypes und Übergabe aller definierten Parameter.
    
this.initButton('button','button'+j,j,'buttonNr.'+j,100+(40*j),100+(40*j));
    } 
Prinzipiell glaube ich, das du noch Verständnisschwierigkeiten bezüglich der Definition von Objekten hast.

Kommst du mit dem o.g. Script klar?

Anbei nochmals die .fla.


Liebe Grüße

Yves
Angehängte Dateien
Dateityp: zip Archive Folder.zip (2,9 KB, 10x aufgerufen)
  Mit Zitat antworten
Alt 28-06-2004, 21:01   #5 (permalink)
Neuer User
 
Benutzerbild von schnabelmax
 
Registriert seit: Oct 2003
Ort: im garten frankreichs
Beiträge: 76
das ist alles keine Antwort auf meine Frage.

Ich weiss was ein protoype ist und wie ich ihn benutze. Ich weiss auch wie mann movieClips durch attachMovie() auf die Bûhne zieht.
Das ist aber nicht das was ich wissen will!

Ich will die Initialisierung meiner Buttons in die duplicateMovieClip Function intigrieren, so habe ich diese Option [,objetInit] jedenfalls verstanden.
Ich weiss nur eben nicht ob es sich bei [,objetInit] um einen Functionsaufruf handelt
und wenn ja, wie ich sie samt Parameterübergabe anspreche. Oder wie es eben sonst geht.


Ich weiss nicht wie ich es noch sagen soll.

das versuche ich zu vermeiden:

ActionScript:
  1. mc.duplicateMovieClip("newMc", 1);
  2. with (this.newMc) {
  3.     _x = 100;
  4.     _y = 100;
  5.     inhalt = _root.text1;
  6. }

und das will ich, wenn es geht, haben:
ActionScript:
  1. mc.duplicateMovieClip ("newMc", 1, gesuchteFn (100, 100, _root.text1) );
und möchte einfach nur wissen wie das aussieht.
__________________
gruß schnabelmax
schnabelmax ist offline   Mit Zitat antworten
Alt 28-06-2004, 22:41   #6 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hey Kollege… ich habe dir haargenau die Antwort auf deine Frage gegeben.

Wie du an meinem Prototype erkennen kannst, wird dort, extra deutlich kommentiert, zuerst ein Objekt definiert und diesem Eigenschaften wie _x, _y zugewiesen. Dieses Objekt nenne ich newClip. Du musst dieses Objekt definieren, um später dessen Eigenschaften für das initObject Parameter zu nutzen. Es ist doch auch ausdrücklich in der Dokumentation erklärt, das bei fehlendem Objekt das Parameter ignoriert wird.

Logischerweise ist innerhalb des Prototypes dann auch der Befehl, der das dort definierte Objekt als initObject Parameter benutzt. Anders ist es sinnbefreit.
Wie du unschwer erkennen kannst, ist die Syntax doch dort korrekt angewandt. Wenn du möchtest, kannst du dort auch einfach einen duplicateMovieClip() statt des attachMovie() verwenden. Die Verwendung des zuvor definierten Objektes bleibt gleich.

Um noch mal ganz klar zu gehen gehe ich nun wortwörtlich auf dein Posting ein.

Zitat:
Zitat von schnabelmax
Ich will die Initialisierung meiner Buttons in die duplicateMovieClip Function intigrieren, so habe ich diese Option [,objetInit] jedenfalls verstanden.
Der Satz an sich ist mehr oder weniger sinnbefreit, obwohl du den Sinn des initObject Parameters wahrscheinlich verstanden hast.

Sinn des ganzen ist es, ein generisches Objekt mit Eigenschaften zu definieren.

Zitat:
Zitat von schnabelmax
PHP-Code:
mc.duplicateMovieClip("newMc"1); 
with (this.newMc) { 
****
_x 100
****
_y 100
****
inhalt _root.text1



//Besser ist diese Syntax

var duplicatedMc=originMc.duplicateMovieClip('newMc'1); 
duplicatedMc._x=100;
duplicatedMc._y=100;
duplicatedMc.inhalt=_root.text1

Um dir nun die Angaben für jeden neue Instanz zu sparen (obwohl es da auch andere Wege gibt), kannst du nun die Eigenschaften

PHP-Code:
duplicatedMc._x=100;
duplicatedMc._y=100;
duplicatedMc.inhalt=_root.text1
Auch in ein Objekt schreiben. Wobei es hier schon schwachsinnig ist, die Eigenschaft „inhalt“

PHP-Code:
duplicatedMc.inhalt=_root.text1
statisch zu definieren. Aber ok. Machen wir es trotzdem. Das Objekt sieht dann so aus:

PHP-Code:
var objekt={}; 
objekt._x=x
objekt._y=y
objekt.inhalt=_root.text1
Prima. Jetzt hast du also die Eigenschaften in ein Objekt geschrieben.
Und wozu? Na damit du nun dieses Objekt als initObject Parameter verwenden kannst.

Und wie geht das?

Na ganz einfach.

PHP-Code:
this.duplicateMovieClip('newMC',1,objekt); 
Da die Variable „objekt“ nun auch Datentyp „Objekt“ ist, wird das Parameter nicht mehr ignoriert.

Was macht nun das initObject Parameter. Es überträgt, sowie schon von mir oben erklärt und ebenfalls in der Dokumentation erklärt, die Eigenschaften des Objektes auf die MovieClipInstanz, die wir mit duplicateMovieClip() erschaffen haben.

So, und damit das ganze Sinn macht, sollte man es ja auch so abstrakt bzw dynamisch halten, wie es geht. Was bietet sich da mehr an, als einen Prototype zu schreiben, dem man alle Variablen als Funktionsparameter mitgibt, hmm?



Also nochmal das Beispiel von vorhin, nur mit duplicateMovieClip(), damit du dich nicht daran störst, das ich der Einfachheit halber attachMovie() nahm.

PHP-Code:
//Actionscript 1.0 

//Definition des Prototypes 
MovieClip.prototype.initButton=function(name,depth,titel,x,y
    { 
      
//Definition des Objektes newClip und dessen Eigenschaften 
    
var newClip={}; 
    
newClip.titel=titel
    
newClip.name=name
    
newClip._x=x
    
newClip._y=y
    
newClip.onRollOver=function() 
        { 
        
trace (this.titel); 
        } 
      
//duplicateMovieClip mit „~ObjectInit Parameter“ 'newClip' 
    
this.duplicateMovieClip(name,depth,newClip); 
    } 

//Test 
for (var j=1j<5j++) 
    { 
      
//Aufrufen des Prototypes und Übergabe aller definierten Parameter. 
    
_root.button.initButton('button'+j,j,'buttonNr.'+j,100+(40*j),100+(40*j)); 
    } 
Anbei hast du nun wieder eine *.fla, diesmal mit duplicateMovieClip();. Warum ich lieber attachMovie() zur Demonstration genommen habe erkennst du daran, das du nun einen häßlich Ursprungsbutton auf der Bühne liegen hast
Klar kann man den mit removeMovieClip() entfernen… aber darum geht es hier nicht.

Wenn du nun genau überlegst, war bereits mein letzter Beitrag eine Antwort exakt auf deine Frage.

Wie sieht es nun mit diesem Posting aus?


Yves
Angehängte Dateien
Dateityp: zip Archive.zip (2,8 KB, 16x aufgerufen)
  Mit Zitat antworten
Alt 28-06-2004, 22:46   #7 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Zitat von schnabelmax
und das will ich, wenn es geht, haben:
ActionScript:
  1. mc.duplicateMovieClip ("newMc", 1, gesuchteFn (100, 100, _root.text1) );
und möchte einfach nur wissen wie das aussieht.
Wie ich bereits vermute habe, hast du quasi denn exakten Sinn eines Objektes in diesem Falle nicht verstanden.

Ist zwar schon alles erklärt, aber hier nochmal dein Ansatz auseinander dividiert.

PHP-Code:
//…
gesuchteFn (100100_root.text1
Es gehört eigentlich keine Funktion als initObject an diese Stelle, sondern der Name eines Objektes.

Die Parameter, die variieren, übergibst du einfach einer Funktion. Hier bietet sich ein Prototype an. Und in diesem Prototype steht dann das Objekt welches als initObject Parameter verwendet werden soll.

Um nun extern Parameter übergeben zu können musst du nun den Prototype aufrufen. Also ist quasi nur noch innerhalb dieses Prototypes Platz für die Clipinstanzierende Funktion wie duplicateMovieClip().



Nun alles klar?


Liebe Grüße

Yves
  Mit Zitat antworten
Alt 29-06-2004, 12:24   #8 (permalink)
Neuer User
 
Benutzerbild von schnabelmax
 
Registriert seit: Oct 2003
Ort: im garten frankreichs
Beiträge: 76
Hi 409coffeemaker,
also ersteinmal vielen dank für deine Bemühungen.
Das war ja eine harte Nuss.

Du hast mich gestern schlieslich doch auf den richtigen Weg gebracht und ich habe dad was ich suchte gefunden nämlich
ActionScript:
  1. mc.duplicateMovieClip ("newMc", 1, {_x: 100, _y: 100, titel: _root.text1}) );
So sieht die Parameterübergabe aus.
Hier habe ich jedoch keine chance dem mc eine onRollOver Fn zu übergeben.

Deine attach methode ist für meinen konkreten Fall also die einzig Sinnfolle.
Ich wollte aber nur dieses ding mit {} und _x: 100 wissen.

a+
__________________
gruß schnabelmax
schnabelmax ist offline   Mit Zitat antworten
Alt 29-06-2004, 12:43   #9 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi Max,

Zitat:
Zitat von schnabelmax
Hi 409coffeemaker,
Du hast mich gestern schlieslich doch auf den richtigen Weg gebracht und ich habe dad was ich suchte gefunden nämlich
ActionScript:
  1. mc.duplicateMovieClip ("newMc", 1, {_x: 100, _y: 100, titel: _root.text1}) );
So sieht die Parameterübergabe aus.
Der Unterschied zu meiner Methode ist nur der, das du hier als initObject das Objekt direkt an der Stelle des Parameters definierst. Ich habe eine Variable vom Datentyp Objekt vergeben, die dann praktisch auf das Objekt „verweist“, da dieses viel flexibler ist.

Zitat:
Zitat von schnabelmax
Hier habe ich jedoch keine chance dem mc eine onRollOver Fn zu übergeben.
Eben. Daher solltest du das Objekt separat definieren und nicht direkt in der Function.

Zitat:
Zitat von schnabelmax
Deine attach methode ist für meinen konkreten Fall also die einzig Sinnfolle.
Ich denke, das diese Methode generell in Verbindung mit einem Prototype am sinnvollsten ist. Also so, wie ich bereits gepostet habe. Aber das ist nur meine Meinung. Wäre schön, wenn Rusty & co etwas dazu sagen könnten.

Zitat:
Zitat von schnabelmax
Ich wollte aber nur dieses ding mit {} und _x: 100 wissen.
Hehe…



Na dann…


Liebe Grüße

Yves
  Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele