の対応するプロパティを変更しないこと、それが問題でしたが、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(9月22日)は、誰かがそれを固定"。しかし、私はこのブランチをインストールできるとは思わないので、私はちょうどあなたのトリックを使用するよ – Gulvan
これは最新のリリースで修正されています:) –
悲しいことに悲しいことに、swflibのために私の現在のプロジェクトでは使用できません。バージョン – Gulvan