Hallo zusammen!
Ich habe das Problem, dass in einem
DisplayObject keine
MouseEvents mehr erzeugt werden, wenn dieses mit den FlashPlayer10-eigenen 3D-Funktionen transformiert wurde und eine der folgenden Voraussetzungen gegeben ist:
- Man fügt innerhalb des verzerrten Objekts eine Maske hinzu.
- Man ändert die PerspectiveProjection für das Objekt.
Da ich aber genau diese Konstellation für mehrere 3D-verzerrte Scrollbereiche benötige, hier meine Fragen:
- Ist das wirklich so, oder mache ich irgendwo einen blöden Fehler?
- Wenn ja, gibt es einen Workaround für den einen oder anderen Fall (oder gar für beide)?
- Besteht das Problem auch im FP 10.1, oder wurde es dort schon behoben?
- Sollte man diesen Bug bei Adobe melden?
Ich habe das Problem mal in einer Testklasse isoliert (Die beiden Problembereiche sind markiert. Wenn man beide auskommentiert, funktionieren die
MouseEvents - nicht jedoch sobald eines aktiv ist):
PHP-Code:
package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.PerspectiveProjection;
import flash.utils.getTimer;
public class Test3D extends Sprite{
////
private var w :uint = 66;
private var button :Sprite;
private var maskShape :Shape;
///////////////////////////////////////////
public function Test3D() {
super();
// Background
graphics.beginFill(0, 1);
graphics.drawRect( -w, -w, w*2, w*2);
// Button
addChild( button = new Sprite() );
button.alpha = .5;
button.buttonMode = true;
button.graphics.beginFill(0xFFFFFF, 1);
button.graphics.drawCircle( 0, 0, w / 2 );
button.addEventListener(MouseEvent.ROLL_OVER, function( e:Event ) {
trace("over" + e.target);
button.alpha = 1;
} );
button.addEventListener(MouseEvent.ROLL_OUT, function( e:Event ) {
trace("out" + e.target);
button.alpha = .5;
} );
// Mask
addChild( maskShape = new Shape() );
maskShape.graphics.beginFill(0x00FF00, .25);
maskShape.graphics.drawCircle(0, 0, w);
// MASKE ZUWEISEN ////////////////////////////
mask = maskShape;
/////////////////////////////////////////////
// Rotation
addEventListener(Event.ENTER_FRAME, move);
}
///////////////////////////////////////////
private function move(e:Event):void {
var projection:PerspectiveProjection = new PerspectiveProjection();
projection.fieldOfView = 90 + 45 * Math.sin( getTimer() / 500 );
// PROJEKTION ZUWEISEN //////////////////////
transform.perspectiveProjection = projection;
/////////////////////////////////////////////
rotationX++;
rotationY++;
}
////
}
}
Schonmal vorab, vielen Dank für Eure Hilfe!