• SpryFlashCMS das Flash CMS
  • Flash on the Beach 2010 in Brighton!
  • Adobe User Group
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-06-2010, 11:00   #1 (Permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 804
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!
__________________
Gruß › Martin

try { harder(); } catch(error) { }
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 07-06-2010, 14:21   #2 (Permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 804
Niemand eine Idee?

Wäre auch für einen Link auf eine Referenz oder ein Post dankbar, dass diese Enschränkung beschreibt...
__________________
Gruß › Martin

try { harder(); } catch(error) { }
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 07-06-2010, 14:44   #3 (Permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.315
Hattest Du den schon gefunden? Da steht zumindest ein Workaround drin:
Loosing children interactivity after setting perspectiveProjection | franto.com

...und es hat anscheinend nichts mit der Maske zu tun

Geändert von T.Decay (07-06-2010 um 14:46 Uhr)
T.Decay ist offline   Mit Zitat antworten
Alt 07-06-2010, 15:12   #4 (Permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 804
Danke für den Link, T.Decay!

Wenn man (wie dort beschrieben) die PerspectiveProjection nicht dem verzerrten Objekt selbst sondern einem übergeordneten DisplayObjectContainer zuweist, funktionieren die MouseEvents wieder.

Das Problem mit der Maske besteht aber weiterhin: Eine Maske in 3D-verzerrten DisplayObjects scheint für alle Unterelemente die MouseEvents zu blockieren.
__________________
Gruß › Martin

try { harder(); } catch(error) { }
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 07-06-2010, 15:26   #5 (Permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.315
Könntest Du nicht als Maske ein identisch verzerrtes DisplayObject nehmen und den parent damit maskieren?
T.Decay ist offline   Mit Zitat antworten
Alt 07-06-2010, 15:30   #6 (Permalink)
Neuer User
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 366
das einzige, was mir dazu einfällt wäre die Maske evtl auch auf den gesamten Container zu legen und die Transformation des Zielobjektes zu übernehmen
evtl erzeugst du einen Container, schmeisst dort alle Masken rein und definierst das ganze als Maske für dein 3D-Objekt.
ActionScript:
  1. // bei einer Änderung der Perspektive
  2. maske.transform.matrix3D = zielObjekt.transform.matrix3D;
__________________
greetz Thomas

[ Progger, kein Designer! ]
thomas_E ist offline   Mit Zitat antworten
Alt 07-06-2010, 15:39   #7 (Permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 804
Die Lösung scheidet leider aus, da es sich bei den zuverzerrenden Inhalten um per XML-befüllbare Objekte mit verschiedenen Scrollbereichen (dafür brauch ich die Masken) handelt.

Außerdem steht in der Hilfe:
Zitat:
Note: The 3D tools cannot be used on objects on mask layers and layers containing 3D objects cannot be used as mask layers. For more information about the 3D tools, see 3D graphics.
... was diese Lösung wohl unmöglich macht.

Da diese Bereiche aber eigentlich nur in einer planen Ansicht funktionieren müssen, werd ich das Problem wohl umgehen können, indem ich für kurze Zeit den 3D-Modus aussetzte und erst beim nächsten Übergängen wieder starte.

Was aber sehr gurkig ist, weshalb ich jedem dankbar bin, der eine bessere Lösung für dieses Problem hat ...
__________________
Gruß › Martin

try { harder(); } catch(error) { }

Geändert von Martin Kraft (07-06-2010 um 15:44 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 07-06-2010, 15:59   #8 (Permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.315
Evtl. doch beides verzerren, Masken-Sprite in eine BitmapData drawen und die dann als Maske verwenden?
T.Decay ist offline   Mit Zitat antworten
Alt 07-06-2010, 16:11   #9 (Permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 804
Das geht wie gesagt nicht:

Es gibt mehrere verzerrte Sprites, in denen jeweils mehrere Objekte liegen, die dynamisch generiert werden und von mehreren Masken maskiert werden.

Das auseinander zu friemeln wäre bestenfalls ziemlich kompliziert und würde, falls überhaupt möglich, die ganze Anwendung langsam und ziemlich fehleranfällig machen - zumal das bei Bitmaps ja über BlendMode.ERASE laufen müsste.
__________________
Gruß › Martin

try { harder(); } catch(error) { }

Geändert von Martin Kraft (07-06-2010 um 16:12 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
flash3d, flashplayer10, mask, mouseevent, perspectiveprojection

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS3] MouseEvents gtotehc Flash Einsteiger 5 27-05-2009 13:57
Probleme beim Senden von Variablen in AS2 und FlashPlayer10 Plugin easterner Flash und Datenbanken 0 25-02-2009 17:18
MouseEvents: Down & Move broud ActionScript 3 4 04-03-2008 13:02
MouseEvents JohannaKD Flex programmieren 0 01-10-2007 15:41
Schleifenproblem bei mouseevents Detty ActionScript 1 3 27-06-2003 00:47


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2010 Marc Thiele und Sascha Wolter.