Farbe von Movieclip ändern [Flash 8]
| Beiträge: 43 Wohnort: Leonberg Registriert: Jan 2010
| 20.06.2010, 15:10
HalliHallo,
ich habe ein kleines Problem beim ändern der Farbe eines Movieclips über AS 2.0.
Ich habe mehrere Buttons, über die verschiedene Movieclips ausgewählt werden können, mit denen dann gezeichnet werden kann. Zu Beginn haben sie alle die Farbe weiß, was über AS gut funktioniert.
Beim Drücken eines Farbbuttons soll dann die Farbe der Movieclips geändert werden. Die bereits gezeichneten sollen jedoch weiß bleiben, nur die, die danach gezeichnet werden sollen dann eine andere Farbe haben.
So sieht das ganze bis jetzt aus.
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | btn1.onRelease = function () {
eins=true;
zwei=false;
};
btn2.onRelease = function () {
eins=false;
zwei=true;
};
var eins, zwei;
var i:Number = 0;
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var history:Array = new Array;
onMouseDown = function () {
history[history.length] = new Array(i, i);
onMouseMove = function () {
if(eins) {
_root.container.attachMovie("grafik1", "grafik" + i, i);
musik(_xmouse, _ymouse);
}
else if(zwei) {
_root.container.attachMovie("grafik2", "grafik" + i, i);
musik(_xmouse, _ymouse);
}
_root.container["grafik"+i]._y = _ymouse;
_root.container["grafik"+i]._x = _xmouse;
_root.container["grafik"+i]._rotation = Math.sin(i) * 400;
_root.container["grafik"+i]._alpha = Math.random() * 50;
// Farbe festlegen / ändern
var meineFarbe = "0xFFFFFF";
pink_btn.onRelease = function() {
var meineFarbe = "0xFF3399";
var intervalId2:Number;
}
a = new Color(_root.container["grafik"+i]);
intervalId2 = a.setRGB(meineFarbe);
history[history.length - 1][1]++;
i++;
}
}
onMouseUp = function(){
if(history[history.length - 1][0] == i){
undoFunction();
}
delete onMouseMove
}
|
Wie gesagt, das sie zu Beginn alle weiß sind klappt, aber die Farbe ändern leider nicht.
Sieht jemand meinen Fehler?
Grüße Jule | | | Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 20.06.2010, 15:46
Ich weiss nicht, ob es nur daran liegt, aber der Wert von meineFarbe sollte ein integer sein, also int/uint (besser wär uint, da der Alphakanal u.U. in die selbe Zahl genommen wird) und nicht ein String. "0xFFFFFF" --> String hingegen 0xFFFFFF hexadezimale Zahl (16777215), dar. Das steht für 0xFFFFFF jeweils von 0-255 | | | Beiträge: 43 Wohnort: Leonberg Registriert: Jan 2010
Themenautor/in
| 20.06.2010, 15:52
mhm danke, aber daran scheint es nicht zu liegen. Ändert sich nichts. Den Wert "0xFFFFFF" nimmt er ja, er nimmt nur nicht den Wert "0xFF3399", der durch den Button festgelegt wird. | | | Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 20.06.2010, 16:01
Funktionierts mit einer anderen Farbe am Anfang?
Noch etwas das auf den 1. Blick komisch aussieht:ActionScript:1 2 3 4 | pink_btn.onRelease = function() {
var meineFarbe = "0xFF3399";
var intervalId2:Number;
}
|
hast du innerhalb von onmousedown->onmousemove->.. kommt es überhaupt jemals dazu bzw. warum setzt du das da hin und bei jedem mousemove wird die Funktion neu gesetzt.
Versuch mal mit trace oder dem Debugger dir ausgeben zu lassen, was z.B. die aktuelle Farbe ist und ob die jemals gesetzt wird.
Dann lass dir noch a ausgeben (die Color-Instanz).
PS: noch was du musst nicht var benutzen, wenn die Variabel im Klassen-Scope deklariert ist und du hast das doch auch gemacht, oder? Sonst setzt du eine lokale variable, die danach nicht mehr verwendet wird. | Geändert von jomac am 20.06.10 um 16:03 Uhr | |
| | Beiträge: 43 Wohnort: Leonberg Registriert: Jan 2010
Themenautor/in
| 20.06.2010, 16:09
Also "meineFarbe" gibt bei trace immer "0xFFFFFF" aus, und das die ganze zeit (klar immer bei MouseMove). Bei a kommt nur "[object Object]".
Ich kann auch anstatt "0xFFFFFF" eine andere Farbe nehmen, das macht er dann auch. Er ändert sie nur nicht, nach drücken des Buttons. Wenn ich das ganze außerhalb von "onmousedown, onmousemove" setzte gehts gar nicht mehr. Dann macht er sie auch nicht mehr weiß sondern belässt sie in ihrere eigentlichen Farbe. | Geändert von Jule88 am 20.06.10 um 16:09 Uhr | |
| | Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 20.06.2010, 16:15
Vieleicht etwas klarer:ActionScript:1 2 3 4 | pink_btn.onRelease = function() {
var meineFarbe = "0xFF3399"; // das var hier weg und als hex -> meineFarbe = 0xFF3399;
var intervalId2:Number;
}
|
musst du nach draussen verlegen das bedeutet auf die selbe Ebene wie onmousedown.
ActionScript:1 | var meineFarbe = "0xFFFFFF; // in meineFarbe = 0xFFFFFF; ändern
|
Und private var meineFarbe;auf Stufe der Klasse oder wo du das ganze Script drinnen hast. | | | Beiträge: 43 Wohnort: Leonberg Registriert: Jan 2010
Themenautor/in
| 20.06.2010, 21:07
Also das hat irgendwie nicht so hingehauen, oder ich hab es nicht so ganz verstanden :)
Ich hab es jetzt folgender maßen gelöst:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | pink.onRelease = function () {
weiss=false;
pink=true;
};
var i:Number = 0;
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var history:Array = new Array;
onMouseDown = function () {
history[history.length] = new Array(i, i);
onMouseMove = function () {
if (weiss) {
if(eins) {
_root.container.attachMovie("grafik1", "grafik" + i, i);
musik(_xmouse, _ymouse);
var meineFarbe = 0xFFFFFF;
a = new Color(_root.container["grafik"+i]);
a.setRGB(meineFarbe);
}
else if(zwei) {
_root.container.attachMovie("grafik2", "grafik" + i, i);
musik(_xmouse, _ymouse);
var meineFarbe = 0xFFFFFF;
a = new Color(_root.container["grafik"+i]);
a.setRGB(meineFarbe);
}
|
usw..... ist zwar jetzt ziemlich lang geworden so, aber es erfüllt seinen Zweck. | | | Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 20.06.2010, 22:15
Dein Problem war sehr wahrscheinlich, dass die Variable nicht im selben scope war. Beispiel wie sie es wäre:ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | pink.onRelease = function () {
meineFarbe = 0xF52887;
};
weiss.onRelease = function () {
meineFarbe = 0xFFFFFF;
};
var meineFarbe:uint = 0xFFFFFF; // in einem gemeinsamen scope als var deklariert
var i:Number = 0;
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var history:Array = new Array;
onMouseDown = function(){
history[history.length] = new Array(i, i);
onMouseMove = function () {
if(eins) {
_root.container.attachMovie("grafik1", "grafik" + i, i);
}else if(zwei) {
_root.container.attachMovie("grafik2", "grafik" + i, i);
}
musik(_xmouse, _ymouse);
a = new Color(_root.container["grafik"+i]);
a.setRGB(meineFarbe); //...
|
| | | Beiträge: 43 Wohnort: Leonberg Registriert: Jan 2010
Themenautor/in
| 27.06.2010, 22:52
Ohja, daran wird es gelegen haben. Vielen Dank dir nochmal!
Grüße Jule | |
| Ähnliche Beiträge zum Thema | 13.09.2022 - Rennier |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News
Regeln & Bedingungen
|