これは私だった場合、私はAS3でこのような何かをするだろう:
は
stop();
var velocity: Vector3D = new Vector3D(0,0,0);
var shooting: Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, function(evt: KeyboardEvent){
// have we moved on the X axis?
velocity.x = evt.keyCode == 37 ? -1: evt.keyCode == 39 ? 1: velocity.x;
// have we moved on the Y axis?
velocity.y = evt.keyCode == 40 ? -1: evt.keyCode == 38 ? 1: velocity.y;
// Have we shot?
shooting = evt.keyCode == 32 ? true : shooting;
});
stage.addEventListener(KeyboardEvent.KEY_UP, function(evt: KeyboardEvent){
// Have we finished moving on the X axis?
velocity.x = evt.keyCode == 37 || 39 ? 0 : velocity.x;
// Have we finished moving on the Y axis?
velocity.y = evt.keyCode == 40 || 38 ? 0 : velocity.y;
// have we finished shooting?
shooting = evt.keyCode == 32 ? false : shooting;
});
stage.addEventListener(Event.EXIT_FRAME, function(evt: Event){
// evaluate velocity and shooting and jump to the required keyframes.
trace(velocity, shooting);
});
それへのキーが評価されていますキーが2つのKeyboard event listeners
で押された後、フレームの最後に、収集されたすべてのデータに従ってムービークリップを更新します。私はこれが重要だと思います。なぜなら、宇宙船が最終的に動くとき、それは間違いなく最新の状態にあることを知っているからです。
Iはまた、宇宙船と敵かもしれないとの間の距離を計算するための宇宙船とVector3D.distance()
に速度を印加するようVector3D.scaleBy()
などのオブジェクトの動きを計算するための多くの有用な特性を有するように宇宙船の速度を格納するVector3D
を使用します距離に関連して武器の正確さや損傷に使用することができます。
出典
2017-02-01 11:28:59
Zze
これはFlash自体のキーフレームを使用した私のAS2コードでした:if(Key.isDown(Key.SPACE)){ this50AndStop( "20"); } \t else { this.gotoAndStop( "idle"); } \t \t if(Key.isDown(Key.RIGHT)){ this._x + = 5; this.gotoAndStop( "6"); } if(Key.isDown(Key.SPACE)){ this.gotoAndStop( "20"); } if(Key.isDown(Key.LEFT)){ this._x - = 5; this.gotoAndStop( "6"); } など... –
2つの条件をリンクするために '&&'演算子を使用してみましたか? 'if(event.keyCode == 40 && event.keyCode == 45)のようなもの{何かをする; } '40&45を左矢印キーとスペースキーの正しいキーコードに置き換えます。また、正しいAS3構文を確認してください(修正するのに役立つAS3コードは表示されませんでした)... –
@ VC.One私はイベントリスナーについてまだ学んでいないと推測します。 –