2017-09-20 25 views
4

私はHaxe + OpenFLを使ってゲームを作っています。私は一度前にJSを目標としていたし、私は猫に切り替えて、次の建設は動作を停止:Haxe + OpenFL-> Neko、MouseEvent.xxxKey always false

if(e.shiftKey) 
    do smth 

OFCは、私はこのコードのブロック、またコンテキストを変更していませんでしたターゲットを変更するので。何がうまくいかなかったのですか?

P. S.トレースが示すように、保持ALT、CTRLまたはSHIFTキーをthis linkに基づいMouseEventオブジェクト

答えて

2

の対応するプロパティを変更しないこと、それが問題でしたが、2年前に修正されました。不思議なことに、私のテストはそれがまだ動作しないことを示しています。

このクラスは、jsでは正しく動作しますが、nekoでは正しく動作することを示しています。

class Main extends Sprite 
{ 

    public function new() 
    { 
     super(); 

     var s:Sprite = new Sprite(); 
     s.graphics.beginFill(0xff0000); 
     s.graphics.drawCircle(100, 100, 200); 
     s.graphics.endFill(); 
     addChild(s); 

     //testing a simple click event 
     s.addEventListener(MouseEvent.CLICK, OnClick); 

     //testing wheel events, as I read somewhere it could a been a bug in earlier versions 
     s.addEventListener(MouseEvent.MOUSE_WHEEL, OnWheel); 

     //testing click events on the stage object, in case it acted differently 
     addEventListener(MouseEvent.CLICK, OnStageClick); 
    } 

    private function OnStageClick(e:MouseEvent):Void 
    { 
     trace(e.shiftKey); 
    } 

    private function OnWheel(e:MouseEvent):Void 
    { 
     trace(e.shiftKey); 
    } 

    private function OnClick(e:MouseEvent):Void 
    { 
     trace(e.shiftKey); 
    } 

} 

代替ソリューションは、openfl.events.KeyboardEventを使用して、シフトキーをブール値としてアップまたはダウンしているときに注意することであろう(そのシフトのキーコードが16であることに注意)。この例は私のテストで正しく動作します。

class Main extends Sprite 
{ 
    var shiftIsPressed:Bool = false; 
    public function new() 
    { 
     super(); 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, OnDown); 
     stage.addEventListener(KeyboardEvent.KEY_UP, OnUp); 
     stage.addEventListener(MouseEvent.CLICK, OnClick); 

    } 

    private function OnUp(e:KeyboardEvent):Void 
    { 
     if (e.keyCode == 16) 
     { 
      shiftIsPressed = false; 
     } 
    } 

    private function OnDown(e:KeyboardEvent):Void 
    { 
     if (e.keyCode == 16) 
     { 
      shiftIsPressed = true; 
     } 

    } 

    private function OnClick(e:MouseEvent):Void 
    { 
     if (shiftIsPressed) 
     { 
      trace('Click!'); 
     } 
    } 

} 

更新

私はいつも私が先に述べたキーボードイベントのトリックを使用しましたので、私はそれはまた、C++では動作しないという事実を逃しました。私はこれらの2つのターゲットがカスタムイベントシステムを使用していて、誰かが作成したイベントに修飾キーを登録するのを忘れたと思います。

アップデート2(9月22日)

Someone fixed it

+2

ふむ、それは良いことだ "アップデート2(9月22日)は、誰かがそれを固定"。しかし、私はこのブランチをインストールできるとは思わないので、私はちょうどあなたのトリックを使用するよ – Gulvan

+2

これは最新のリリースで修正されています:) –

+0

悲しいことに悲しいことに、swflibのために私の現在のプロジェクトでは使用できません。バージョン – Gulvan

関連する問題