PDA

Volledige versie bekijken : Meerdere keys input detecteren


pgr83
%Europe/Berlin %517 %2009, 13:24
Ik heb de volgende code,

stage.addEventListener(KeyboardEvent.KEY_DOWN, CheckKeysDown);

function CheckKeysDown(event:KeyboardEvent):void
{
if( event.keyCode == 38 )
{
trace("jumping");
}
if( event.keyCode == 37 )
{
trace("left");
}
if( event.keyCode == 39 )
{
trace("right");
}
if( event.keyCode == 40 )
{
trace("ducking");
}
}Het probleem wat ik hiermee heb is dat als ik pijltje naar beneden druk in combinatie met rechts en dan pijltje omhoog, dan wordt omhoog geregistreerd en zie ik als laatste een trace "jumping". Maar als ik pijltje naar beneden doe in combinatie met links en dan pijltje omhoog wordt deze niet geregistreerd. Ik kan maar niet vinden waar dit aan kan liggen...

jelmer91
%Europe/Berlin %762 %2009, 19:18
Heb ooit eens gelezen dat je maar maximaal 4 keys tegelijk kan, of 3.

Verder checkt hij maar 1 key per keer ( dacht ik )
Heb hetzelfde probleem at the moment, had het volgende als oplossing:


Voor elke key nog een boolean maken, zodra hij eenmaal "geset" is, niet meer controleren tot hij met de event.KEY_UP weer is ge-unset zegmaar :P

Heb het nog niet uitgewerkt, morgen als het goed is wel.

Als het af is, zal ik het script waar ik op uitgekomen ben hier wel posten :)

pgr83
%Europe/Berlin %778 %2009, 19:41
Thanks Jelmer!!

Raar blijft nog steeds dan dat Down+Right+Up wel de up registreert maar Down+Left+Up niet de up registreert. Zelfs al zou er een limiet zijn van 3 key-inputs waarom werkt de ene wel en de andere niet...

Sche
%Europe/Berlin %933 %2009, 23:24
vreemd, bij mij wordt het wel gewoon geregistreerd

jelmer91
%Europe/Berlin %990 %2009, 00:45
Ja, maar niet zegmaar.. tegelijk als in dat hij traced
Jumping, ducking, right

oid :P

Ik ga er voor zorgen pgr83, morge middag post ik het hier, tenzij iemand mij al voor is

jelmer91
%Europe/Berlin %469 %2009, 11:15
Oke, daar komtie :P

Lege AS3 .fla file, met daarin als document class keyCode.as

keyCode.as


package{

import flash.display.*
import flash.events.*
public class keyCode extends MovieClip{
var keyReader:KeyObject = new KeyObject(stage);

public function keyCode() {
addEventListener(Event.ENTER_FRAME,loop);
}
public function loop(e:Event){
if(keyReader.isDown(81)){
trace("Q");
}
if(keyReader.isDown(87)){
trace("W");
}
}

}
}

keyObject.as


package{

import flash.display.Stage;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.utils.Proxy;
import flash.utils.flash_proxy;

dynamic public class KeyObject extends Proxy {

private static var stage:Stage;
private static var keysDown:Object;

public function KeyObject(stage:Stage) {
construct(stage);
}

public function construct(stage:Stage):void {
KeyObject.stage = stage;
keysDown = new Object();
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}

flash_proxy override function getProperty(name:*):* {
return (name in Keyboard) ? Keyboard[name] : -1;
}

public function isDown(keyCode:uint):Boolean {
//trace("isDown called");
return Boolean(keyCode in keysDown);
}

public function deconstruct():void {
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.removeEventListener(KeyboardEvent.KEY_UP, keyReleased);
keysDown = new Object();
KeyObject.stage = null;
}

private function keyPressed(evt:KeyboardEvent):void {
keysDown[evt.keyCode] = true;
}

private function keyReleased(evt:KeyboardEvent):void {
delete keysDown[evt.keyCode];
}
}
}

bijna alle credits to senocular.com :)