{lang: 'de'}
Flashhilfe.de - Flash Community

EventListener reagiert beim zweiten mal nicht mehr [Flash CS5]

 


AntwortenRegistrieren Seite1  

Mediadesigner#1
Benutzerbild von Mediadesigner
Beiträge: 40
Registriert: Aug 2010

27.08.2010, 20:19

Hallo zusammen,

bin neu hier und noch nicht der Experte in Flash daher entschuldigt im Vorhinein mein Unwissen :-)

Es geht um folgendes:

Ich habe mir mit einem Videotutorial einen eigenen einfachen Slider hergestellt , der mir die Werte zwischen 0 für Mute und 15 für max Volume ausgibt.
Mein Problem ist, dass wenn ich beim ersten mal mit der Maus auf den Slider klicke und ihn verschiebe noch alles perfekt funktioniert.
Geh ich zum zweiten mal drauf kann ich ihn immer noch verschieben aber sobald ich die Maus los lasse verschiebt er sich immer noch egal wo und ob ich klicke oder mich bewege.

Den Code dafür seht ihr unten, vielleicht können ja mal ein paar Leute drüber gucken und mir sagen was ich falsch mache.

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        slider_1.addEventListener(MouseEvent.MOUSE_DOWN, dragSlider);
   slider_1.addEventListener(MouseEvent.MOUSE_UP, stopSlider);
   var boundary:Rectangle = new Rectangle(320,36,260,0);
   
   function dragSlider(event:MouseEvent):void
      {
           slider_1.startDrag(true,boundary);
           slider_1.removeEventListener(MouseEvent.CLICK, dragSlider);
           slider_1.addEventListener(Event.ENTER_FRAME, changeVolume);
        }

   function stopSlider(event:MouseEvent):void
      {
           slider_1.stopDrag();
           slider_1.removeEventListener(MouseEvent.MOUSE_UP, stopSlider);
        }

   function changeVolume(event:Event):void
         {
           var vol:int = (((Math.round(slider_1.x)-320)/260)*15);
           trace(vol);
           }


slider_1 ist mein MovieClip

Danke schonmal für eure Hilfe.
Schlagwörter: Drag, eventListener, slider, stopdrag
Geändert von Mediadesigner am 27.08.10 um 20:21 Uhr
badskill#2
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

27.08.2010, 20:39

Den Eventlistener für MOUSE_UP an die stage und nicht an slider_1 anhängen.
So, wie es im Augenblick ist, wird das Event nur dann ausgelöst, wenn sich der Mauscursor über slider_1 befindet. Wenn die Maus aber schnell bewegt und dann losgelassen wird, oder sich die Maus ausserhalb des Rectangles für den Dragbereich befindet (boundary), wird das Event nicht ausgelöst.
Also einfach:
ActionScript:
1stage.addEventListener(MouseEvent.MOUSE_UP, stopSlider);

Dann noch in der stopSlider-Funktion:
ActionScript:
1
2
stage.removeEventListener(MouseEvent.MOUSE_UP, stopSlider);
slider_1.removeEventListener(Event.ENTER_FRAME, changeVolume);

enterFrame sollte ebenfalls noch entfernt werden.
Mediadesigner#3
Benutzerbild von Mediadesigner
Beiträge: 40
Registriert: Aug 2010

Themenautor/in

27.08.2010, 20:48

Hi und danke schonmal für dein Posting,

tut mir trotzdem Leid dir sagen zu müssen das die Problematik weiterhin besteht.
Klick ich beim ersten mal drauf ist alles ok, kann dann auch wieder loslassen, aber beim zweiten mal bleibt er an der Maus kleben, im Rahmen seines Rechtecks.
Geändert von Mediadesigner am 27.08.10 um 20:49 Uhr
badskill#4
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

27.08.2010, 20:51

Das hier fällt mir gerade noch auf:
ActionScript:
1slider_1.removeEventListener(MouseEvent.CLICK, dragSlider);

Da mach mal ein:
ActionScript:
1slider_1.removeEventListener(MouseEvent.MOUSE_DOWN, dragSlider);

draus.

Nachtrag:
Ne Quatsch, lass dass am besten ganz weg.

Zeig mal bitte deinen geänderten Code.
Geändert von badskill am 27.08.10 um 20:53 Uhr
Mediadesigner#5
Benutzerbild von Mediadesigner
Beiträge: 40
Registriert: Aug 2010

Themenautor/in

27.08.2010, 20:58

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
                slider_1.addEventListener(MouseEvent.MOUSE_DOWN, dragSlider);
      stage.addEventListener(MouseEvent.MOUSE_UP, stopSlider);
      var boundary:Rectangle = new Rectangle(320,36,260,0);

               function dragSlider(event:MouseEvent):void
         {
              slider_1.startDrag(true,boundary);
              slider_1.removeEventListener(MouseEvent.CLICK, dragSlider);
              slider_1.addEventListener(Event.ENTER_FRAME, changeVolume);
           }
   
      function stopSlider(event:MouseEvent):void
         {
              slider_1.stopDrag();
              stage.removeEventListener(MouseEvent.MOUSE_UP, stopSlider);
              slider_1.removeEventListener(Event.ENTER_FRAME, changeVolume);
           }

      function changeVolume(event:Event):void
            {
              var vol:int = (((Math.round(slider_1.x)-320)/260)*15);
              trace(vol);
              slider_1.removeEventListener(Event.ENTER_FRAME, changeVolume);
                                  }

badskill#6
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

27.08.2010, 21:11

Eigentlich sollte es so funktionieren, zumindest theoretisch :)
Ich muss jetzt erstmal weg, kann also nicht weiterhelfen.
Eventuell mal eine Testdatei anhängen, damit man sich das Problem mal genauer anschauen kann.
Mediadesigner#7
Benutzerbild von Mediadesigner
Beiträge: 40
Registriert: Aug 2010

Themenautor/in

27.08.2010, 21:57

Das ist zwar nicht das original Programm aber der gleiche Code und auch der gleiche Fehler.

Hab die FLA Datei und die SWF Datei in einem ZipFile gespeichert.

Danke schonmal

Angehängte Dateien:
Komprimierte Datei test.zip24.90 KB
Geändert von Mediadesigner am 27.08.10 um 21:58 Uhr
badskill#8
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

28.08.2010, 18:32

Ich kriege die Datei zwar nicht geöffnet (habe Flash CS3), hab den Fehler aber gefunden. Diese Zeile:
ActionScript:
1stage.addEventListener(MouseEvent.MOUSE_UP, stopSlider);

muss in die Funktion dragSlider.
Geändert von badskill am 28.08.10 um 18:34 Uhr
Mediadesigner#9
Benutzerbild von Mediadesigner
Beiträge: 40
Registriert: Aug 2010

Themenautor/in

28.08.2010, 18:55

Ja perfekt das wars.

Habe es jetzt zusätzlich noch so eingestellt, dass wenn man mit der Maus auf dem Slider ist und dann die Maustaste loslässt erst die changeVolume ausgeführt wird, sonst führt er die beim ersten Klick aber vor dem Verschieben aus.

Danke schonmal für die schnelle Hilfe.

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Ein Lob an die Admins [Flash CS5] 08.05.2022 - Indy_Crossover
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de