2012-03-02 27 views
0

我正在一個側面滾動有一個字符,每次擊中空格鍵時都會彈出一個子彈,我遇到的問題是將子彈向字符方向移動正面臨着(左或右)。動作3 - 啓動一個子彈改變方向與字符

我有幾個布爾變量來告訴我我的角色面臨着哪個方向:walkingRight |所以如果我的walkingRight == true,我希望子彈旅行+ = 10,而walkingLeft == true,bullet - = 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"); 
    } 
} 

我肯定會喜歡這個任何幫助,因爲它爲大專以上的項目。

感謝

+3

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

然後修改代碼獨立存儲每個單獨項目符號的方向,獨立於任何關於主要項目的信息呃,在一個自定義的「myBulletClass.direction」類或vector /數組中。 – ToddBFisher 2012-03-02 19:43:29

回答

1

你可以嘗試這樣的事:

首先創建這個類:一旦子彈創建你應該

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); 
}