Haxe+OpenFL->Neko, MouseEvent.xxxKey Always false



我正在使用haxe OpenFL制作游戏。我曾经曾瞄准过JS,然后我切换到Neko,以下施工停止工作:

if(e.shiftKey)
  do smth

ofc我没有更改此块,也没有更改目标以来,也没有更改上下文。出了什么问题?

p。S.跟踪表明,持有Alt,Ctrl或Shift Keys不会更改Mouseevent对象的相应属性

基于此链接,它曾经是一个问题,但已在两年前解决。奇怪的是,我的测试表明它仍然不起作用。

此类表明,它可以在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并注意何时作为布尔值向上或向下时(请注意,Shift的键代码为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!');
        }
    }
}

update

由于我一直使用了我之前提到的键盘事件技巧,因此我错过了它在C 中也无法使用的事实。我想那两个目标使用一些自定义事件系统,有人忘记将修饰符键注册到创建的事件中。

更新2(9月22日)

有人修复了

相关内容

  • 没有找到相关文章