Basierend auf this link, verwendet es ein Problem zu sein, wurde aber vor zwei Jahren festgelegt. Seltsamerweise zeigen meine Tests, dass es immer noch nicht funktioniert.
Diese Klasse demonstriert, dass sie in js korrekt funktioniert, aber nicht in 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);
}
}
Eine alternative Lösung openfl.events.KeyboardEvent
und beachten Sie zu verwenden, wenn die Shift-Taste als boolean (beachten Sie, dass Verschiebung des keycode ist 16) nach oben oder unten sein könnte. Dieses Beispiel funktioniert in meinen Tests korrekt.
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!');
}
}
}
aktualisieren
Da ich immer das Tastaturereignis Trick benutzt habe ich bereits erwähnt, vermisste ich die Tatsache, dass es auch nicht in C++ funktioniert. Ich nehme an, dass diese beiden Ziele ein benutzerdefiniertes Ereignissystem verwenden und jemand vergessen hat, die Änderungsschlüssel für das erzeugte Ereignis zu registrieren.
Update 2 (sept 22)
Someone fixed it
Heh "Update 2 (22. September) Jemand es fest", das ist gut. Aber ich glaube nicht, dass ich diesen Zweig installieren könnte, also benutze ich einfach deinen Trick – Gulvan
Dies ist in der neuesten Version behoben :) –
Leider kann ich es nicht in meinem aktuellen Projekt verwenden, weil swflib, zieht haxe Version – Gulvan