Hola alle zusammen,
zur Zeit versuche ich, mich intensiv mit AS3 auseinanderzusetzen, doch bisher stoße ich nur auf ein ominöses Problem nach dem anderen.
So möchte ich in meinem aktuellen "Experiment" auf Knopfdruck den Hintergrund von einem radialen Verlauf in einen linearen ändern.
Doch das scheitert schon beim Zeichnen des Verlaufs!
Die Klasse Background sieht so aus:
Zuerst erstelle ich aus der DocumentClass heraus ein Objekt der Klasse Background und füge es der Stage hinzu.
Nun soll per Knopfdruck die Methode createRadial() aufgerufen werden. Also bekommt ein Knopf einen Listener, dessen Methode dann createRadial() aufrufen soll:
Doch nichts passiert?! Nur wenn ich das Fenster resize wird der Verlauf auf einmal sichtbar?! Muss ich irgendeine redraw/refresh-Methode aufrufen? Wenn ich aus dem Konstruktor von Background die Methode createRadial() aufrufe, dann funktioniert es komischerweise? Was mache ich falsch?
Außerdem soll Background so erweitert werden, dass jedes Mal, wenn man den Hintergrund von radial in linear ändern will (oder umgekehrt), sich der aktuelle Hintergrund erst ausfadet, dann der Hintergrund sich ändert und dann wieder eingefadet wird. Ist das überhaupt möglich?
Ich bin am Verzweifeln. Vielen Dank im Voraus!
zur Zeit versuche ich, mich intensiv mit AS3 auseinanderzusetzen, doch bisher stoße ich nur auf ein ominöses Problem nach dem anderen.
So möchte ich in meinem aktuellen "Experiment" auf Knopfdruck den Hintergrund von einem radialen Verlauf in einen linearen ändern.
Doch das scheitert schon beim Zeichnen des Verlaufs!
Die Klasse Background sieht so aus:
PHP:
public class Background extends Sprite {
private var radialActive:Boolean;
private var fadeTween:Tween;
private var fillType:String;
private var colors:Array;
private var alphas:Array = [100, 100];
private var ratios:Array = [0x00, 0xFF];
private var matr:Matrix = new Matrix();
private var spreadMethod:String = SpreadMethod.PAD;
public function Background() {
this.alpha = 1;
}
public function createRadial():void {
radialActive = true;
colors = [0xff3333, 0x66ff66];
fillType = GradientType.RADIAL;
matr.createGradientBox(400, 400, Math.PI/2, 0, 0);
this.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);
this.graphics.drawRect(0,0,400,400);
}
public function createLinear():void {
radialActive = false;
colors = [0x000000, 0xFFFFFF];
fillType = GradientType.LINEAR;
matr.createGradientBox(400, 400, Math.PI/2, 0, 0);
this.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);
this.graphics.drawRect(0,0,400,400);
}
}
Zuerst erstelle ich aus der DocumentClass heraus ein Objekt der Klasse Background und füge es der Stage hinzu.
PHP:
private var back:Background;
(...)
back = new Background();
addChild(back);
Nun soll per Knopfdruck die Methode createRadial() aufgerufen werden. Also bekommt ein Knopf einen Listener, dessen Methode dann createRadial() aufrufen soll:
PHP:
btnLeft1.addEventListener(MouseEvent.MOUSE_DOWN, switchBg);
private function switchBg(event:MouseEvent):void{
back.createRadial();
}
Doch nichts passiert?! Nur wenn ich das Fenster resize wird der Verlauf auf einmal sichtbar?! Muss ich irgendeine redraw/refresh-Methode aufrufen? Wenn ich aus dem Konstruktor von Background die Methode createRadial() aufrufe, dann funktioniert es komischerweise? Was mache ich falsch?
Außerdem soll Background so erweitert werden, dass jedes Mal, wenn man den Hintergrund von radial in linear ändern will (oder umgekehrt), sich der aktuelle Hintergrund erst ausfadet, dann der Hintergrund sich ändert und dann wieder eingefadet wird. Ist das überhaupt möglich?
Ich bin am Verzweifeln. Vielen Dank im Voraus!