私はこの回答はlooking forであり、運がなかった。 One place I lookedは実際には非常に落胆した答えがありました。「マウスやキーボードのイベントを強制することはできません。マウスやキーボードから来なければなりません。as3特定のキーボードイベントを発送するには
Huh?
私は 'brute force'を試してこの解決策を思いついた。多分私はそれを間違って、または愚かにするつもりです。そこには良い方法がありますか?
私は、クラスを開始し、同じアクションを開始するスプライトをステージに配置したいというキーボードイベントがありました。スプライトをクリックするとキーボードイベント(エスケープキー)が起動します。イベントリスナー関数で
、私はイベントに電子自体traced
:
private function keys(e:KeyboardEvent):void {
trace("EscapeKey: ",e);
if (e.keyCode == 27) {
...
}
}
を出力は、私はその後、マウスクリックリスナーが値を使用して新しいKeyboardEventのを作成し、派遣していた
EscapeKey: [KeyboardEvent type="keyDown" bubbles=true cancelable=false eventPhase=2 charCode=27 keyCode=27 keyLocation=0 ctrlKey=false altKey=false shiftKey=false]
ました私は上記のトレースから得た:
private function pauseClick(e:MouseEvent):void {
var a:KeyboardEvent = new KeyboardEvent("keyDown", true, false, 27, 27, 0, false, false, false);
stage.dispatchEvent(a);
}
Presto!
この投稿は、これらのタイプのマウス/キーボードイベントの冗長性を探している他の人にとって便利な機能です。
EDIT ---コメントに要求された完全なクラス例:
package{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.KeyboardEvent;
public class KeyboardMouse extends Sprite {
private var pauseInfo:PauseInfo;
private var escapeKey:EscapeKey;
public function KeyboardMouse() {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keys);
escapeKey = new EscapeKey();
stage.addChild(escapeKey);
pauseInfo = new PauseInfo();
pauseInfo.x = stage.stageWidth;
pauseInfo.y = stage.stageHeight;
pauseInfo.addEventListener(MouseEvent.CLICK,pauseClick);
addChild(pauseInfo);
}
private function keys(e:KeyboardEvent):void {
trace("KeyboardEvent ",e);
if (e.keyCode == 27) { // esc key
if (stage.contains(escapeKey)){
trace("remove escape");
escapeKey.visible = false;
}
else {
trace("show escape");
escapeKey.visible = true;
}
}
}
private function pauseClick(e:MouseEvent):void {
// The trace in 'keys' gives this:
//[KeyboardEvent type="keyDown" bubbles=true cancelable=false eventPhase=2 charCode=27 keyCode=27 keyLocation=0 ctrlKey=false altKey=false shiftKey=false]
var a:KeyboardEvent = new KeyboardEvent("keyDown", true, false, 27, 27, 0, false, false, false);
stage.dispatchEvent(a);
}
}
}
非常に興味深い、やや理解しにくい。この「冗長性」を示す短くてシンプルだが完全なプログラムを見せてもらえますか? – Craig
興味深い!私はいつも 'pause()'のような共通の関数を使いました。そして、複数のイベントリスナーがその関数を呼び出すようにします。それはあなたのボートを浮かべるものは何でも私には簡単です。 –
@Craigプレイヤーが一時停止ボタンをクリックしたときにゲームを一時停止させたいときや、マウスがウィンドウから外れるときや、プレイヤーがPキーを押したときにも、ゲームを一時停止させたいと思うと思います。これには3つの異なるイベントリスナーが必要です。したがってOPは彼の重要な報道機関が働いており、同じイベントを別のイベントリスナーから呼び出す方法を考え出しています。私は、すべてのイベントリスナーに同じ関数pause()を呼び出させるほうがずっと簡単だと思います。 –