Flashhilfe.de - Flash Community

MC über setRGB einfärben [Flash 11]

 


AntwortenRegistrieren Seite1  

Sharky25#1
Benutzerbild von Sharky25
Beiträge: 37
Registriert: Mar 2012

31.03.2012, 14:01

Hallo zusammen,

als Neuling im Bereich AS 3.0 bräuchte ich bitte mal einen Tipp, warum mein MC die Farbe nicht ändert.

Aus meinem "alten" AS 2.0 Code habe ich folgenden Part übernommen, der leider in AS 3.0 völlig wirkungslos ist:

ActionScript:
1
2
        NewColor = new Color(MeinOberMC.MeinUnterMC);
        NewColor.setRGB(0x0000FF);


...eingefärbt werden soll "MeinUnterMC", der sich innerhalb von "MeinOberMC" befindet.

Für Hilfe wäre ich sehr dankbar.
Werbung
Beiträge: 0
Registriert: Feb 2016


vindel#2
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

31.03.2012, 18:16

Hallo,

in AS3 heißt das ColorTransform:
http://www.coursesweb.net/flash/actionscript-change-movieclip-color_t
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Sharky25#3
Benutzerbild von Sharky25
Beiträge: 37
Registriert: Mar 2012

Themenautor/in

01.04.2012, 01:30

vielen Dank das funktioniert perfekt - aber...

...leider stehe ich nun vor einem neuen Problem:
In meinem MC befinden sich mehrere andere MCs. Die sollen natürlich nicht alle die Farbe bekommen. Deshalb spreche ich nur denjenigen an, der eingefärbt werden soll. Dieser nimmt aber nahezu die gesamte Fläche ein.

Das Problem besteht darin, dass der übergeordnete MC Instanz einer Klasse ist, an der ein EventHandler hängt, welche bei einem Mausklick auf eben jenen MC die Einfärbung auslöst.

Ich drehe mich also im Kreis - belasse ich die Farbfläche innerhalb des übergeordneten MC als "normale" Zeichnung (=kein Symbol) funktioniert zwar mein EventHandler, leider aber mit dem Erfolg dass alles innerhalb der übergeordneten MC die Farbe annimmmt.

Wandle ich die Fläche in einen MC um, um nur sie/ihn gezielt anzusprechen, funktioniert mein EventHandler nicht mehr, da die anderen Strukturen (Haarlinien) kaum bzw. nur schwer angeklickt werden können - ich stehe auf dem Schlauch... :-(

Habe schon versucht eine transparente Fläche darüber zu legen - funktioniert aus mir unbegreiflichen Gründen aber leider nicht?
vindel#4
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

01.04.2012, 14:36

Warum kannst du deine Fläche nicht in einen MC umwandeln? Natürlich ändert sich dann die Hierarchie, aber von der Funktionalität ändert sich rein gar nichts (wenn man alle Listener anpasst).
Ich versteh das Problem nicht..
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Werbung
Beiträge: 0
Registriert: Feb 2016


Sharky25#5
Benutzerbild von Sharky25
Beiträge: 37
Registriert: Mar 2012

Themenautor/in

01.04.2012, 16:15

Hallo,

okay, dann möchte ich die Frage einmal anders formulieren (vielleicht habe ich hier einfach einen Knoten im Hirn):

Mein MC ist ein Container für mehrere weitere darin befindliche MC und er ist einer Klasse zugeordnet. Wenn ich nun (per Knopfdruck) eine Kopie dieses MC aus der Bibliothek auf die Bühne bringe, schreibe ich bestimmte Werte in die Variablen dieser Klasse und füge einen EventHandler hinzu.

Klicke ich den Movie später wieder an, gibt er mir die in seiner Klasse gespeicherten Werte zurück.

Die Frage wäre nun:
Angenommen ich ändere den EventHandler, so dass er nicht mehr am "Container" sondern an einem in diesen befindlichen MC hängt, könnte mir dieser die Werte aus der Klasse des übergeordneten MC zurückgeben?

...bin noch recht neu in der "Klassenthematik" habe vorher nur mit AS 2.0 gearbeitet.
1000Dank für Deine Hilfe.
vindel#6
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

01.04.2012, 17:10

Also ich habs so verstanden:

Main MC1
 - UnterMC
 - - Event Handler
Main MC2
 - Unter MC
 - - Event Handler
Richtig? Und du willst jetzt von deinem EventHandler die Klasse von MainMCX haben:
ActionScript:
1
2
3
function (e:Event):void {
  MovieClip(e.target.parent).name;
}

Also in einem e.target ist ja dein aktueller MC gespeichert und dann einfach "parent" aufrufen um auf den vorherigen MC zu gelangen!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Sharky25#7
Benutzerbild von Sharky25
Beiträge: 37
Registriert: Mar 2012

Themenautor/in

01.04.2012, 17:28

Hallo,
ja, ich glaube jetzt sind wir "on the same page" ;-)

Ich würde also den EventHandler gleich an den "UnterMC" hängen, den dann nach der Instanz ID seines "parent" fragen (beim Klick darauf), um dann über die Instanz ID die Klassenvariablen abzufragen - korrekt?

...muss ich nachher gleich mal testen :-)

Vielen Dank
Sharky25#8
Benutzerbild von Sharky25
Beiträge: 37
Registriert: Mar 2012

Themenautor/in

01.04.2012, 20:34

Hallo,

Mein Code sieht jetzt wie folgt aus:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
...
var NeuesTeil = new APitemArray[iAP]();

// Neues Schienenteil im Movie "Bahn" einfügen
Bahn.addChild(NeuesTeil);

// Parameter an Instanz der Schiene übergeben
NeuesTeil.schieneNumber = itemNumber;
   
NeuesTeil.trackback.addEventListener(MouseEvent.CLICK, ClickHandlerTrack)
...


Dem Movie "Bahn", der sich auf der Stage befindet, wird eine neue Instanz der Klasse, die sich im APitemArray[iAP] an der entsprechenden Stelle befindet hinzugefügt.
In diesem hinzugefügten Movie, befindet sich nun derjenige, der eingefärbt werden soll "trackback" und beim Klick sagen soll in welchem Movie er sich befindet.

Die Klasse besitzt dazu eine entsprechende Variable (*.schieneNumber) die diesen Wert gespeichert hat - er ist der Schlüssel, an den ich ran kommen muss.

Die Funktion "ClickHandlerTrack" sieht nun wie folgt aus:

ActionScript:
1
2
3
4
5
6
7
function ClickHandlerTrack(e:Event):void {
   
  checkField_stage.text = "itemClass: "+MovieClip(e.target.parent).name;
  var NeuesTeil  = MovieClip(e.target.parent).name;
  numberSelectedPart = NeuesTeil.schieneNumber;
   
}


In dem Textfeld, das ich zur Kontrolle eingebaut habe, bekomme ich zwar die Instanz (z. B. instance487) zurück. Dabei handelt sich aber vermutlich um ein DisplayObject?

Es gelingt mir weder die zuvor gesetzte *.schieneNumber abzufragen, noch das Teil einzufärben?
Könntest Du mir evtl. noch einen Tipp geben?
Geändert von Sharky25 am 01.04.12 um 20:36 Uhr
vindel#9
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

01.04.2012, 22:55

Mit dem ".name" bekommst du den Namen des MC's, wenn du die Variable "schienenNumber" haben möchtest, musst du das schriebn anstatt ".name":
ActionScript:
1numberSelectedPart = MovieClip(e.target.parent).schieneNumber;
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Sharky25#10
Benutzerbild von Sharky25
Beiträge: 37
Registriert: Mar 2012

Themenautor/in

02.04.2012, 07:35

...irgendwann (so nach72h Hardcorecoding) kommt der Zeitpunkt, an dem man vor lauter Bäumen den Wald nicht mehr sieht ;-)

Funktioniert einwandfrei - 1.000-DANK !!!

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de