0

スペースバーを押すたびに弾丸を発射するキャラクターを持つサイドスクローラーに取り組んでいます.私が抱えている問題は、キャラクターが向いている方向(左または右)に弾丸を動かすことです.

キャラクターがどちらの方向を向いているかを示すブール変数がいくつかあります。walkLeft の場合、walkingRight == true の場合、弾丸は +=10 移動し、walkingLeft == true の場合、弾丸 -= 10 になります。

問題は、左に向けて発砲すると弾丸が左に移動しますが、右に曲がるとすぐに同じ弾丸が右に移動し始めることです.

AS3 コードのスニペット (すべてのフレーム) は次のとおりです。

if(gamepad.fire2.isPressed){
   // initiate bullet
   var bullet = new Bullet();
   bullet.x = _player.x;
   bullet.y = _player.y;
   /*_boundaries.*/addChild(bullet);
   bullets.push(bullet);
}

for each(var bullet in bullets){
   if(walkingRight || idleRight || jumpingRight){
    bullet.x += 10;
    trace("Bullet - Moving Right");
   }
   else if(walkingLeft || idleLeft || jumpingLeft){
    bullet.x -= 10;
    trace("Bullet - Moving Left");
   }
}

大学のプロジェクトのため、これから何か助けていただければ幸いです。

ありがとう

4

1 に答える 1

1

次のようなことを試すことができます:

最初にこのクラスを作成します。

dynamic class BulletWrapper{
     private var bullet:DisplayObject = null;
     public function BulletWrapper( bullet:DisplayObject ){
         this.bullet = bullet;
     }
     public function getBullet():DisplayObject{
         return this.bullet;
     }
}

次に、コードを変更します。

if(gamepad.fire2.isPressed){
  // initiate bullet
   var bullet = new Bullet();
   bullet.x = _player.x;
   bullet.y = _player.y;
   /*_boundaries.*/addChild(bullet);
   var wrapper:BulletWrapper = new BulletWrapper( bullet );
   //storing as much information as related to bullet animation 
   wrapper.walkingStep = 0;
   wrapper.log = "No move";
   //-------------------------------
   if( walkingRight || idleRight || jumpingRight ){
       wrapper.walkingStep = 10;
       wrapper.log = "Bullet - Moving Right";
   }else if( walkingLeft || idleLeft || jumpingLeft ){
       wrapper.walkingStep = -10;
       wrapper.log = "Bullet - Moving Left";
   }
   //--------------------------
   bullets.push(wrapper);
}

for each(var wbullet:BulletWrapper in bullets){
   var bullet = wbullet.getBullet();
   bullet.x += wbullet.walkingStep;
   trace(wbullet.log);
}
于 2012-03-03T09:10:28.573 に答える