• FFK10 - 13. bis 16. April 2010 in Köln
  • Unterstützt das Flashforum!
  • Adobe User Group
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-01-2010, 17:39   #16 (Permalink)
klein und fein:)
 
Registriert seit: Nov 2009
Ort: Köln
Beiträge: 24
ich glaub ich solltes sein lassen ...

hab jetzt:durchgelesen, hoert sich auch ganz schluessig an, nur will es einfach nicht

Zitat:
Wenn deine Klassen DisplayObjecte sind, kannst du beim dispatchen bubbles auf true setzten, dann geht das Event durch die ganze DisplayListe.
Genau das will ich

Mein Ansatz auf den letzten Beispiel:

hoerer.as
PHP-Code:
package classes
{
    
import flash.events.Event;
    
import flash.events.EventDispatcher;
    
import flash.display.*;
    public class 
Hoerer extends MovieClip
    
{
        public function 
Hoerer()
        {

        }
        public function 
addDispatcher():void
        
{
            
addEventListener(Events.STARTEstartByEvent);
        }
        public function 
startByEvent(e:Events)
        {
             
trace("startByEvent - Dispatcher: " e.currentTarget);
        }
    }

main.as //beinhaltet die Klasse Ausloeser
PHP-Code:
package classes
{
    
//Imports
    
import flash.display.*;
    
import flash.events.*;
    
import flash.events.EventDispatcher;
    
    public class 
Main extends Sprite
    
{
        public function 
Main()
        {
        
        }
        public function 
erstellen()
        {
            var 
meinAusloeser:Ausloeser = new Ausloeser();
            
this.addChild(meinAusloeser);
            
meinAusloeser.ausloesen();
        }
    }        

ausloeser.as
PHP-Code:
package classes
{
    
//Imports
    
import flash.display.*;
    
import flash.events.*;
    
import flash.events.EventDispatcher;
    
    public class 
Ausloeser extends Sprite
    
{
        public function 
Ausloeser()
        {
            
//Hier soll der Dispatcher für Hoerer abgegeben werden
        
}
        public function 
ausloesen()
        {
            
dispatchEvent(new Events(Events.STARTEnull));
        }
    }        

events.as
PHP-Code:
//subclass semster
package classes
{
    
// Import der Flash Eventklasse
    
import flash.events.*;

    public class 
Events extends Event
    
{
        
// Eventarten, bekanntes Beispiel: MouseEvent.CLICK
        
public static const STARTE:String "STARTE";
 
        
// Variable in denen wir zusätzliche Eventdaten speichern können
        
public var _data:Object;
 
        
// Der Konstruktor
        
public function Events(type:Stringdata:Objectbubbles:Boolean=truecancelable:Boolean=false
        {
            
super(typebubblescancelable);
            
_data data;
            
trace("Konstruktor von Events");
            
trace("TYPE: " type);
        }

        
override public function clone():Event
        
{
            return new 
Eventsthis.typethis.datathis.bubblesthis.cancelable); 
        }

        public function 
get data():Object
        
{
            return 
_data;
        }
    }

main.as
PHP-Code:
import classes.Hoerer;
import classes.Ausloeser;
import classes.Main;
import classes.Events;
import flash.events.*;
import flash.events.EventDispatcher;

var 
meinHoerer:Hoerer = new Hoerer();
stage.addChild(meinHoerer);
meinHoerer.addDispatcher(); 

var 
meinMain:Main = new Main();
stage.addChild(meinMain);
meinMain.erstellen(); 
julianeS.85 ist offline   Mit Zitat antworten
Alt 06-01-2010, 17:58   #17 (Permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 309
Sorry etwas unklar ausgedrückt, müssen nicht nur DisplayObjecte sein sondern auch in der DisplayListe stehen. Also irgendwo mit addChild hinzugefügt werden.

Also irgendwo noch den Hoerer in die DisplayListe setzten dann sollte es gehen.

Das durchreichen der Events ist allerdings die etwas sauberere Lösung.
Lukas78 ist offline   Mit Zitat antworten
Alt 06-01-2010, 18:27   #18 (Permalink)
klein und fein:)
 
Registriert seit: Nov 2009
Ort: Köln
Beiträge: 24
mit stage.addChild(meinHoerer); fuege ich doch meinHoerer als Kindknoten der Buehne hinzu, somit sollte er doch in der DisplayList stehen, oder seh ich das falsch?

Zitat:
trace(stage.numChildren)
sagt mir auch nach dem ich stage.addChild(meinHoerer); ein Child mehr

Geändert von julianeS.85 (06-01-2010 um 18:33 Uhr)
julianeS.85 ist offline   Mit Zitat antworten
Alt 06-01-2010, 18:52   #19 (Permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 309
Jep hatte ich überlesen. Mmh dann weiß ich es auch nicht so recht.

Events die bubblen versuche ich eigentlich immer zu meiden, die marodieren dann gerne durch die ganze DisplayListe und lösen Sachen aus die sie nicht sollen. Oder aber wie in deinem Fall tauchen nicht auf und man kann nicht verfolgen ob und wo sie hängen bleiben und warum.

Blick auch nicht ganz durch dein Konstrukt durch und ehrlich gesagt ist es mir noch etwas schleierhaft welchen Sinn das hat. Wirkt so ein wenig umständlich bis unsauber.
Lukas78 ist offline   Mit Zitat antworten
Alt 06-01-2010, 19:45   #20 (Permalink)
klein und fein:)
 
Registriert seit: Nov 2009
Ort: Köln
Beiträge: 24
Okay Lukas, ich hab jetzt deinen anderen Vorschlag mit dem durchreichen genommen und funktioniert auf anhieb! Nochmal vielen Dank auch für deine Geduld *daumenhoch*

Zitat:
Blick auch nicht ganz durch dein Konstrukt durch und ehrlich gesagt ist es mir noch etwas schleierhaft welchen Sinn das hat. Wirkt so ein wenig umständlich bis unsauber.
Ja meine Anwendung ist sicher auch umständlich³, sind aber mein ersten Gehversuche mit Actionscript. Ich bin nur rroh wenns läuft alles andere wird sicher mit der Zeit und dem studieren von Quellcode anderer Entwickler

Ich verusch es jetzt mal in meine Anwendung zu integrieren ...
julianeS.85 ist offline   Mit Zitat antworten
Alt 06-01-2010, 20:00   #21 (Permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 354
Events bubblen nur nach oben und nicht durch die gesamte DisplayList. D.h. der Event geht vom Dispatcher durch alle Parents davon. Demzufolge registriert der Listener in der Hörer Klasse kein Event, da sich die Auslöser Klasse nicht innerhalb der Hörer Klasse befindet.

Du kannst in der addDispatcher Methode der Hörer Klasse die Listener an die stage hängen, dann funktionierts auch mit dem Bubblen.
mohj ist offline   Mit Zitat antworten
Alt 06-01-2010, 20:08   #22 (Permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 8.728
Das Bubbling funktioniert nicht, weil Hörer nicht der parent von Auslöser ist. Um Events bubblen zu lassen muss es eine Hierarchie von DisplayObjects geben. In deinem Fall addest du die Elemente nur zur stage. Das hat gar keinen Effekt. Das ist einer der Gründe, warum man nicht direkt mit der stage arbeiten sollte. Es macht of wenig Sinn.

Mein Tipp: mal das Kapitel für Event handling in der Referenz lesen.

Anbei ein Beispiel für Event bubbling.

ActionScript:
  1. package fs.components
  2. {
  3.  
  4.   import flash.display.Sprite;
  5.   import flash.events.MouseEvent;
  6.   import flash.utils.getQualifiedClassName;
  7.  
  8.   public class Button extends Sprite
  9.   {
  10.  
  11.     public function Button()
  12.     {
  13.       super();
  14.       addEventListener(MouseEvent.CLICK, onClick);
  15.  
  16.       graphics.beginFill(0);
  17.       graphics.drawRoundRect(0, 0, 100, 100, 10, 10);
  18.       graphics.endFill();
  19.     }
  20.  
  21.     private function onClick(event:MouseEvent):void
  22.     {
  23.       trace(getQualifiedClassName(this) + ".onClick [type:" + event.type + "]");
  24.       trace("\t[currentTarget:" + event.currentTarget + ", target:" + event.target + "]");
  25.     }
  26.   }
  27. }
ActionScript:
  1. package fs.components
  2. {
  3.  
  4.   import flash.display.Sprite;
  5.   import flash.events.MouseEvent;
  6.   import flash.utils.getQualifiedClassName;
  7.  
  8.   public class Application extends Sprite
  9.   {
  10.  
  11.     private var _button:Button;
  12.  
  13.     public function Application()
  14.     {
  15.       super();
  16.  
  17.       addEventListener(MouseEvent.CLICK, onClick);
  18.       _button = new Button();
  19.       addChild(_button);
  20.     }
  21.  
  22.     private function onClick(event:MouseEvent):void
  23.     {
  24.       trace(getQualifiedClassName(this) + ".onClick [type:" + event.type + "]");
  25.       trace("\t[currentTarget:" + event.currentTarget + ", target:" + event.target + "]");
  26.     }
  27.   }
  28. }
ActionScript:
  1. package
  2. {
  3.  
  4.   import flash.display.Sprite;
  5.  
  6.   import fs.components.Application;
  7.  
  8.   public class AppExample extends Sprite
  9.   {
  10.  
  11.     private var _application:Application;
  12.  
  13.     public function AppExample()
  14.     {
  15.       _application = new Application();
  16.       addChild(_application);
  17.     }
  18.   }
  19. }
__________________
FFK09:Speaker und FFK09:Trainer :: Architectures - Refactoring - Prototyping - Coding - Training :: ActionScript 3 - Flex [2,3,4] - Java - Scala
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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
Eigenen Event auslösen? silentx ActionScript 3 7 27-04-2009 11:49
onEnterFrame in einer eigenen Klasse falconry ActionScript 2 2 16-04-2008 16:45
Event einer Klasse an Child-Klasse salzblog ActionScript 3 5 12-09-2007 11:09
Kennt eine Klasse Ihren eigenen Instanznamen? andi2003 ActionScript 2 23 04-12-2006 19:03
eigenen event-handler :onRightPress: Scrawer Softwarearchitektur und Entwurfsmuster 12 23-08-2004 22:16


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
FFK10 - 13. bis 16. April 2010 in Köln


Copyright ©1999 – 2010 Marc Thiele und Sascha Wolter.