Not sure what you're specific problem may be, but to answer the question of
what to do since there's no Key.isDown()...

I borrowed this from Andre Michelle... works a charm.

private var keyState:Array = new Array();

private function handleKeyDown(event:KeyboardEvent):void
{
   keyState[event.keyCode] = true;
}

private function handleKeyUp(event:KeyboardEvent):void
{
   keyState[event.keyCode] = false;
}

This takes advantage of the fact that AS3 arrays are sparse (otherwise you
could just use an Object or Dictionary). Just replace any calls to
Key.isDown() with keyState[Keyboard.CONSTANT].

Troy.


On 20 Mar 2007 05:22:18 -0700, mtthwnthnyhys <[EMAIL PROTECTED]> wrote:

  Hey all,

I'm working on some physics/game stuff... not typical Flex area of
concern, but... well
eventually I'll be making use of the Flex specific stuff, and for now I
want to write in in AS3
and am on a Mac, so no AS3 Preview for me... :(

Anyways, I wrote a little function to try and capture "persistent" key
press... as the
Key.isDown() got deprecated. It looks like this:

private var l:uint; //left
private var u:uint; //up
private var r:uint; //right
private var d:uint; //down

private function persistKeyDown(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.LEFT)
{
l = setInterval(control, 10, event);
}

if(event.keyCode == Keyboard.UP)
{
u = setInterval(control, 10, event);
}

if(event.keyCode == Keyboard.RIGHT)
{
r = setInterval(control, 10, event);
}

if(event.keyCode == Keyboard.DOWN)
{
d = setInterval(control, 10, event);
}

//tFrame.text = "keyDown: " + event.keyCode;
}

private function persistKeyUp(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.LEFT)
{
clearInterval(l);
}

if(event.keyCode == Keyboard.UP)
{
clearInterval(u);
}

if(event.keyCode == Keyboard.RIGHT)
{
clearInterval(r);
}

if(event.keyCode == Keyboard.DOWN)
{
clearInterval(d);
}

//tFrame.text = "keyUp: " + event.keyCode;
}

The control function just applies forces to an object on the screen. I
have the seperate
intervals for each key so that I can catch simultaneous keys being held
down... is that
right? I think I must be doing something wrong, because, though it works
fine in FireFox,
it behaves all weird in Safari.

You can check it out here:

http://www.noncehence.com/game/experiments/test05.html

Ideally, the green ball should bounce off the walls and the grey box.
You'll have to click
inside the canvas to give it focus, and you can control the green ball
with the arrow keys.
It's actually kind of fun already, but only in FireFox. In Safari, the
green ball seems to get
"stuck" in one direction or another and "magnatize" to a wall.

Is there a difference between how keyDown/Up events are dispatched in
various browsers?
That doesn't make any sense to me... but then, I don't know why I'm having
this problem.

If anyone can help, or has other questions for me, please let me know.

Thanks much,
//Matt

Reply via email to