Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-12-2009, 11:53   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 4
eigener Eventhandler

Hallo allerseits,
ich möchte einen eigenen Eventhandler für ein Drap und Drop Event erstellen. Aber leider funktioniert das nicht so wie ich mir das denke. Das Event wird zwar getriggert, aber der handler im der Dokumentenklasse wird nicht aufgerufen. was mach ich falsch?

Hier der Code, im Anhand findet sich das ganze Kunstwerk.

Danke im voraus,
thomas

Code:
// Eventklasse
public class DragEvent extends Event{
	public static const START_DRAG_EVENT:String = "START_DRAG_EVENT";
	public static const STOP_DRAG_EVENT:String = "STOP_DRAG_EVENT";

	public var data;

	public function DragEvent(type:String, data) {
		super(type);
		this.data = data;
		trace('Event:'+type);
	}
	
	public override function clone():Event{
		return new DragEvent(this.type,this.data);
	}
	
	public override function toString():String{
		return formatToString("DragEvent", "type", "bubbles", "cancelable", "eventPhase", "data");
	}

}
// Klasse des MovieClip der über die Bühne gezogen werden kann
public class Kasten extends MovieClip
{
	public function Kasten() 
	{
		this.addEventListener(MouseEvent.MOUSE_DOWN, this.startDragEvent);
		this.addEventListener(MouseEvent.MOUSE_UP, this.stopDragEvent);

	}
	private function startDragEvent(event:MouseEvent):void {
		this.startDrag();
		var dragEvent:DragEvent=new DragEvent(DragEvent.START_DRAG_EVENT, this)
		this.dispatchEvent(dragEvent);
	}

	private function stopDragEvent(event:MouseEvent):void {
		this.stopDrag();
		var dragEvent:DragEvent=new DragEvent(DragEvent.STOP_DRAG_EVENT, this)
		this.dispatchEvent(dragEvent);
	}
}

// Dokumentenklasse
public class MainClass extends MovieClip{
	public function MainClass() {
		this.addEventListener(DragEvent.START_DRAG_EVENT, this.handleStartDrag);
		this.addEventListener(DragEvent.STOP_DRAG_EVENT, this.handleStopDrag);
	}
	
	private function handleStartDrag(event:DragEvent){
		trace("Eventhandler MainClass:Sprite wurde hier angefassr:"+event.data.x);
	}
	private function handleStopDrag(event:DragEvent){
		trace("Eventhandler MainClass:Sprite wurde hier losgelassen:"+event.data.x);
	}
}
Angehängte Dateien
Dateityp: zip EventTest.zip (3,5 KB, 5x aufgerufen)

Geändert von 1tomtom (31-12-2009 um 11:58 Uhr) Grund: fehler beim posten
1tomtom ist offline   Mit Zitat antworten
Alt 31-12-2009, 12:41   #2 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
leider fehlt die .fla in deinem zip..
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 31-12-2009, 12:51   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 4
Zitat:
Zitat von the binary Beitrag anzeigen
leider fehlt die .fla in deinem zip..
ups, doch nur ein teilkunstwerk ... dann jetzt aber .. ;-)
Angehängte Dateien
Dateityp: zip EventTest.zip (8,4 KB, 4x aufgerufen)
1tomtom ist offline   Mit Zitat antworten
Alt 31-12-2009, 13:45   #4 (permalink)
Neuer User
 
Benutzerbild von herrmannplatz
 
Registriert seit: Jun 2009
Beiträge: 25
also ich denke du musst der instanz von dem kasten den eventListener adden nicht der MainClass. Die MainClass dispatcht ja nicht das event. Da gibt es also nichts zu hören.

hoffe es hilft

ps: also gib dem MovieClip einen Instanznamen und dann kannst du ihn so ansprechen

mcBox.addEventListener(DragEvent.START_DRAG_EVENT, this.handleStartDrag);
mcBox.addEventListener(DragEvent.STOP_DRAG_EVENT, this.handleStopDrag);

Geändert von herrmannplatz (31-12-2009 um 14:00 Uhr)
herrmannplatz ist offline   Mit Zitat antworten
Alt 01-01-2010, 16:59   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 4
hmm, wenn ich doch aber der MainClass ein Event auffangen und behandeln möchte, welches durch das loslassen oder anfassen eines Kasten-Objektes ausgelöst wird? Wie stelle ich das an, dass in in einer Klasse ein Event aulöse, welches ich in einer anderen Klasse behandle?
1tomtom ist offline   Mit Zitat antworten
Alt 01-01-2010, 19:25   #6 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 485
suchst Du das?
ActionScript:
  1. package
  2. {
  3.     import flash.events.Event;
  4.     import flash.events.EventDispatcher;
  5.    
  6.     public class EventWerfen extends EventDispatcher
  7.     {
  8.         public function EventWerfen()
  9.         {
  10.            
  11.         }
  12.        
  13.         public function wirf():void
  14.         {
  15.             this.dispatchEvent(new Event("ichFliege"));
  16.         }
  17.     }
  18. }
ActionScript:
  1. package
  2. {
  3.     import flash.display.MovieClip;
  4.     import flash.events.Event;
  5.    
  6.     public class main extends MovieClip
  7.     {
  8.    
  9.         public function main()
  10.         {
  11.             var ew:EventWerfen = new EventWerfen();
  12.             ew.addEventListener("ichFliege", this.fangen);
  13.             ew.wirf();
  14.         }
  15.        
  16.         private function fangen(e:Event):void
  17.         {
  18.             trace("gefangen");
  19.         }
  20.     }
  21. }
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website
Linowitch ist offline   Mit Zitat antworten
Alt 01-01-2010, 19:33   #7 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 485
und so wenn du auch noch eine eigene Eventklasse brauchst, z.B. um Werte zu übergeben.
ActionScript:
  1. package
  2. {
  3.     import flash.events.Event;
  4.    
  5.     public class EventWerfenEvent extends Event
  6.     {
  7.        
  8.         public static const ICH_FLIEGE:String = "ichFliege";
  9.         private var _weite:Number;
  10.        
  11.         public function EventWerfenEvent(type:String, weite:Number, bubbles:Boolean=false, cancelable:Boolean=false)
  12.         {
  13.             this._weite = weite;
  14.             super(type, bubbles, cancelable);
  15.         }
  16.        
  17.         public function get weite():Number { return this._weite; }
  18.     }
  19. }
ActionScript:
  1. package
  2. {
  3.     import flash.events.Event;
  4.     import flash.events.EventDispatcher;
  5.    
  6.     public class EventWerfen extends EventDispatcher
  7.     {
  8.         public function EventWerfen()
  9.         {
  10.            
  11.         }
  12.        
  13.         public function wirf(m:Number):void
  14.         {
  15.             this.dispatchEvent(new EventWerfenEvent(EventWerfenEvent.ICH_FLIEGE, m));
  16.         }
  17.     }
  18. }
ActionScript:
  1. package
  2. {
  3.     import flash.display.MovieClip;
  4.     import flash.events.Event;
  5.    
  6.     public class main extends MovieClip
  7.     {
  8.    
  9.         public function main()
  10.         {
  11.             var ew:EventWerfen = new EventWerfen();
  12.             ew.addEventListener(EventWerfenEvent.ICH_FLIEGE, this.fangen);
  13.             ew.wirf(30.5);
  14.         }
  15.        
  16.         private function fangen(e:EventWerfenEvent):void
  17.         {
  18.             trace(e.weite + "m weit geworfen");
  19.         }
  20.     }
  21. }
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website
Linowitch ist offline   Mit Zitat antworten
Alt 01-01-2010, 21:10   #8 (permalink)
Neuer User
 
Benutzerbild von herrmannplatz
 
Registriert seit: Jun 2009
Beiträge: 25
hmm jetzt bin ich etwas irritiert wo es hingehen soll.

du hast doch schon die Kastenklasse die DragEvents feuert. kannst ja auch instanzen der kastenklasse erstellen.

PHP-Code:
package{
    
import flash.display.*;
    
import flash.events.*;

    
    public class 
MainClass extends MovieClip{
        private var 
mcKasten Kasten;
        
        public function 
MainClass() {
            
mcKasten = new Kasten();
            
mcKasten.addEventListener(DragEvent.START_DRAG_EVENTthis.handleStartDrag);
            
mcKasten.addEventListener(DragEvent.STOP_DRAG_EVENTthis.handleStopDrag);
            
this.addChild(mcKasten);
        }
        
        private function 
handleStartDrag(event:DragEvent){
            
trace("Eventhandler MainClass:Sprite wurde hier angefassr:"+event.data.x);
        }
        private function 
handleStopDrag(event:DragEvent){
            
trace("Eventhandler MainClass:Sprite wurde hier losgelassen:"+event.data.x);
        }
    }

mensch hab ich auch mal den scriptkasten benutzt.

Geändert von herrmannplatz (01-01-2010 um 21:18 Uhr)
herrmannplatz ist offline   Mit Zitat antworten
Alt 02-01-2010, 09:04   #9 (permalink)
Alter User
 
Benutzerbild von Linowitch
 
Registriert seit: Nov 2006
Ort: München
Beiträge: 485
Sorry, wollte niemanden verwirren, meine Antwort kam auf Grund des folgenden Satzes.

Zitat:
Wie stelle ich das an, dass in in einer Klasse ein Event aulöse, welches ich in einer anderen Klasse behandle?
ist auch nur ein Beispiel wie man das macht, ohne Bezug zum eigentlichen Thema
__________________
Gruß Linowitch
Wer glaubt gut zu sein hat aufgehört besser zu werden!

Website

Geändert von Linowitch (02-01-2010 um 09:05 Uhr)
Linowitch ist offline   Mit Zitat antworten
Alt 02-01-2010, 14:44   #10 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Beiträge: 4
Zitat:
Zitat von herrmannplatz Beitrag anzeigen
hmm jetzt bin ich etwas irritiert wo es hingehen soll.

du hast doch schon die Kastenklasse die DragEvents feuert. kannst ja auch instanzen der kastenklasse erstellen.

PHP-Code:

mcKasten
.addEventListener(DragEvent.START_DRAG_EVENTthis.handleStartDrag);
mcKasten.addEventListener(DragEvent.STOP_DRAG_EVENTthis.handleStopDrag); 
ja, das wars. ich weise also den eventListener dem Objekt zu, welches das Event wirft, mit der Methode der Hauptklasse als Parameter, welche das Event behandelt. Mein Irrtum war, dass das Event global, sprich in der MainClass, durch Hinzufügen eines Handlers erkannt werden kann.

und nun werd ich mir noch der Vollständigkeit halber das Ding mit einer seperaten EventDispatcher-Klasse anschauen :-).

Danke erstmal für die Klarsicht!

Gruß,
Thomas
1tomtom ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
as3, events

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
Eventhandler Newbeefrage hypergrafx ActionScript 3 3 12-05-2009 15:44
Button Eventhandler falconry Komponenten und SmartClips 1 26-11-2007 16:40
Combobox und Eventhandler castor_2001 Komponenten und SmartClips 5 23-08-2005 22:27
this in Funktionen und EventHandler atothek Flash MX 2004 3 17-02-2004 14:02
EventHandler th. Softwarearchitektur und Entwurfsmuster 15 25-01-2002 09:00


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele