Solved

Flash 8: Custom Class Listening to Key Events

Posted on 2007-03-26
6
181 Views
Last Modified: 2010-04-03
How can I listen to root key events from inside a custom class I created?

Details:
I created a custom class that handles audio playback of MP3 files. I need to be able to handle key events from outside the class in that class. How can I create a key event handler inside the class that listens and reacts to keyboard events on _root?

Thanks,

JB
0
Comment
Question by:jsound
  • 3
  • 3
6 Comments
 
LVL 18

Expert Comment

by:Antonio Estrada
ID: 18794848
Hello JB, you can use them just like you'd normally use them just by adding a key listener. Something like this:

class myClass {
      public function myFunc():Void {
            var KeyPress:Boolean;
            var keyListener:Object = new Object();
            
            keyListener.onKeyDown = function() {
                  KeyPress = true;
            }
            keyListener.onKeyUp = function() {
                     KeyPress = false;
            }
            Key.addListener(keyListener);
             
               if(KeyPress) {
                    trace("Key pressed");
               }
       }
}

Good luck :)
0
 

Author Comment

by:jsound
ID: 18794971
Yeah, I did something similar, which didn't work either. Has got to do with something not passing the key press event properly. I just simply don't get any results out of the code (yours or mine).

Since the Key class is a top-level class, there shouldn't be anything else I need to do add the listener to the Key class.

I'm doing this within a Flash Slide Presentation project, whereby the custom class is handling the audio playback, depending on the keys that are pressed. The keys need to respond globally, in other words, not based on the current slide.

I create a key handler function in my class, but it didn't work, thus the question in case I overlooked something.

Any further words of wisdom you may have?

Thanks,

JB
0
 
LVL 18

Accepted Solution

by:
Antonio Estrada earned 500 total points
ID: 18794977
Oh, forgot about something important, it's supposed to be within an event (onRelease, onDrag, onEtc) in order to work correctly. So ignore my post above, because I forgot those lines, instead check this one:

class myClass {
      
        function myClass() {
              trace("instance created");  
        }
        
      public function myFunc(X:MovieClip):Void {
            var KeyPress:Boolean;
            var keyListener:Object = new Object();

          keyListener.onKeyDown = function() {
                  KeyPress = true;
            }
            keyListener.onKeyUp = function() {
                     KeyPress = false;
            }
            Key.addListener(keyListener);
           
                  X.onRollOver = function() {            
                        if(KeyPress) {
                               trace("Key pressed");
                        }
                  }
       }
}

Main timeline's code:

import myClass;
var Z = new myClass();
Z.myFunc(myMovieClip);

So anytime you are doing a rollOver on "myMovieClip", we can retrieve the key value. This works like a work-around since you can add a MC of the same width/height of your movie and always retrieve key presses.

Good luck!
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:jsound
ID: 18795003
Ah, I'll give that one a try. What I actually did was to add an empty movie clip to the _root and then add an onKeyDown function to the movie clip. Didn't work, so I will try your solution.

I'll let you know what comes of it.

JB
0
 

Author Comment

by:jsound
ID: 18797217
That did it (with some modifications to fit my scenario). Thanks.

It turned out that it was a problem where the function for the key listener was called.

All that was needed was to call the function from the init statement for the class to add the key listener to the class. Again, this is for my specific setup where the keys need to respond globally and not for a specific movie clip (target).

Here is the basic code that did it for me:

      public function addKeyListener():Void {
          var keyListener:Object = new Object();
          keyListener.onKeyDown = keyHandler;
          Key.addListener(keyListener);
      }
      
      private function keyHandler():Void {
           trace("Handling key");
      }
      
0
 
LVL 18

Expert Comment

by:Antonio Estrada
ID: 18797823
Ah true, you were talking about the whole movie. Well it's pretty nice you got it, and I'm glad I was able to help :).
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Pushing Adobe Flash Player Fails with Error %%2 1 476
Stock Videos 17 325
Adobe Flash Player : screen freezes for a few GUI & Rdp 5 606
How to convert image files to a movie file 6 108
I have been doing hardcore actionscripting for some time; and needless to say I have faced a lot of problems in just understanding others' code rather than understanding what the code executes. A programmer's life can become hell when there are a lo…
I have found that much of my time doing support ends up being a constant repetition of the same steps to different people.  Early on I stated using web pages with Frequently Asked Questions (FAQs) to alleviate most of the burden.  Sometimes this jus…
In this tutorial viewers will learn how to create a basic shape tween animation in Flash including shape hints for smooth animation Open a new document in Flash: Draw a shape: Select another frame (how long you want the tween to be): Right click and…
The goal of the tutorial is to teach the user how to live broadcast using Flash Media Live Encoder and connecting it to YouTube to broadcast. Log into your Youtube account, choose live stream settings, start live stream from Flash Media Live Enc…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now