我正在使用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日)
有人修复了