Einzelnen Beitrag anzeigen
Alt 07-06-2010, 12:00   #1 (permalink)
Martin Kraft
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.607
Question FlashPlayer10 3D blockiert MouseEvents?!

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(01);
            
graphics.drawRect( -w, -ww*2w*2);
            
            
            
// Button
            
            
addChildbutton = new Sprite() );
            
button.alpha .5;
            
button.buttonMode true;
            
button.graphics.beginFill(0xFFFFFF1);
            
button.graphics.drawCircle00);
            
            
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
            
            
addChildmaskShape = new Shape() );
            
maskShape.graphics.beginFill(0x00FF00.25);
            
maskShape.graphics.drawCircle(00w);
            
            
// MASKE ZUWEISEN ////////////////////////////
            
mask maskShape;
            
/////////////////////////////////////////////
            
            
            // Rotation
            
            
addEventListener(Event.ENTER_FRAMEmove);
            
        }
        
        
///////////////////////////////////////////
        
        
private function move(e:Event):void {    
            
            var 
projection:PerspectiveProjection = new PerspectiveProjection();
            
projection.fieldOfView 90 45 Math.singetTimer() / 500 );
            
            
// PROJEKTION ZUWEISEN //////////////////////
            
transform.perspectiveProjection projection;
            
/////////////////////////////////////////////
            
            
rotationX++;
            
rotationY++;
        }
        
        
////
        
    
}


Schonmal vorab, vielen Dank für Eure Hilfe!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten