Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-09-2004, 14:17   #1 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
Question Exisitenz von Listener erfragen?

hi,

ich weise ein erstelltes objekt (meinListener) als listener einer taste (hier der Maus) zu.

PHP-Code:
Mouse.addListener(meinListener); 
da das ganze relativ dynamisch funktioniert bzw. funktionieren soll. möchte ich gerne vorher abfragen ob schon ein Listener schon auf der taste exisitiert. weil ich vermeiden möchte, dass der Listener doppelt zugewiesen wird.


mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 28-09-2004, 14:43   #2 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
??? das verstehe ich nicht. du weißt doch ob du einer Klasse einen listener hinzugefügt hast oder nicht erklär das mal etwas deutlicher bitte.

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 28-09-2004, 14:50   #3 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
http://www.anschlag.net/tsk-site/tsk3.html

öffne news und scrolle, schließe es, öffne news und scrolle = er scrollt mit doppelter geschwindigkeit, weil wieder ein listener geadded wird.
einfach ne variable beim ersten adden setzen und die dann abfragen, wollte ich als workaround probieren. gestaltet sich aber relativ schwierig, da die ganze site sich dynamisch aufbaut und es so schwer fällt eindeutige variablen zu setzen.

ich möchte einfach nur im prinzip folgendes machen, weil es auch am flexibelsten einsetzbar ist:

if(Mouse.meinListener != "true"){
Mouse.addListener(meinListener);
}


leider klappt die abfrage so ncith.


mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 28-09-2004, 14:57   #4 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
naja man kann den internen _listeners Array sichtbar machen.
ActionScript:
  1. AsSetPropFlags (Mouse, null, 0, true);
  2. obj1 = {};
  3. Mouse.addListener (obj1);
  4. Mouse.addListener (this);
  5. trace ("anzahl der listener " + Mouse["_listeners"].length);
  6.  
  7. for (var i in Mouse["_listeners"])
  8. {
  9.     trace (i + " - " + Mouse["_listeners"][i]);
  10. }
  11. ;
ich persönlich würde das aber lieber ohne AsSetPropFlags lösen.
michael ist offline   Mit Zitat antworten
Alt 28-09-2004, 15:13   #5 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
na wenn wir mal ehrlich sind dann macht mann das auch nicht so. wenn du einen listener hinzufügst bei einer ´bestimmten aktion dann sollteste ihn auch wieder entfernen wenn er nicht mehr gebraucht wird. ansonsten machste das mit einer einzigen flag beim initialisieren deine projektes

function initApp(){
/*....*/
if(!mouseListenerAdded){
Mouse.addListener(this.mouseListener);
mouseListenerAdded = true;
}
}

es ist absolut wichtig in einem projekt ein klares fluß diagramm zu haben zb wenn ich auf news drücke wird ein listener hinzugefügt drücke ich auf closeNews oder einen anderen menu punkt wird er wieder entfernt

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 28-09-2004, 15:17   #6 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
k thx.

dann werd ich wohl doch den weg gehen ihn immer sofort wieder weg zu nehmen.
schade dachte eigentlich, dass man das evtl. einfach auslesen könnte.


mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 28-09-2004, 15:20   #7 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
wie gutknut es zeigt geht auch das aber das ist alles andere als eine saubere arbeit(nix für ungut ). es ist auch nicht wirklich ein großer akt das anmelden und abmelden. du mußt ja nicht jedesmal den listener erneut erzeugen es reicht ja wenn er einmal erzeugt wird und nur an und abgemeldet wird

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 28-09-2004, 17:09   #8 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Generell ist es aber so, dass neben addListener zugleich removeListener aufführt wird, weil MM wohl von solchen Anwendungsfehlern ausgegangen ist )

Das Problem sollte woanders liegen.

Code:
a = {
	onMouseDown: function(){ trace( "onMouseDown" ) }
}

Mouse.addListener( a );
Mouse.addListener( a );
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 29-09-2004, 01:09   #9 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
da es in meinem fall doch etwas ungeeignet ist ihn beim schließen zu entfernen, habe ich variablen gesetzt, die sicherstellen, dass für jeden scroller die listener nur einmal geadded wird und siehe da das problem ist weg. also liegt es doch an einer doppelten zuweisung und nicht woanders.

trotzdem thx an alle.


mfg esia
__________________
it´s always the same, but most different
esia ist offline   Mit Zitat antworten
Alt 29-09-2004, 07:38   #10 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Nur nochmal zum nachhaken.
André Michelle hat ja gezeigt,
dass eine doppelte Zuweisung
des gleichen Objects, keine
doppelte Ausgabe bewirkt.

Ich kenne dieses Problem nur
von setInterval z.B.
Hast Du da irgendwo ein setInterval,
dass dann doppelt aufgerufen wird?
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 29-09-2004, 11:27   #11 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Das mit der doppelten Zuweisung funktioniert nur dann wie gewünscht, wenn der Listener das gleiche Objekt ist. Hier ist ein Beispiel um das Problem zu verdeutlichen:

ActionScript:
  1. var frame = 0;
  2. onEnterFrame = function(){
  3.     if( ++frame >= 5){
  4.         delete this.onEnterFrame;
  5.     } else {
  6.         Mouse.addListener({onMouseDown: function(){
  7.             trace("mouseDown");
  8.         }});
  9.     }
  10. }

mfg. r

Geändert von bokel (29-09-2004 um 11:54 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 29-09-2004, 15:54   #12 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Komisch, komisch.
Und was ist hiermit? :

ActionScript:
  1. var frame = 0;
  2. _root.onEnterFrame = function() {
  3.  if (++frame >= 5) {
  4.   a = {onMouseDown:function () {
  5.    trace("mouseDown");
  6.   }};
  7.   delete _root.onEnterFrame;
  8.  }
  9.  Mouse.addListener(a);
  10. };

Na ja, weiß nicht ob mein post noch
Sinn macht.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 30-09-2004, 09:23   #13 (permalink)
nie-auslernender
 
Registriert seit: Jul 2001
Beiträge: 466
also wie bokel zeigt war es bei mir der fall. es war ja immer das gleiche objekt. hatte das mit dem trace auch überprüft, dass er mir mehrmals die gleichen werte dann ausgibt.


mfg esia
__________________
it´s always the same, but most different
esia 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele