2012-02-01 11 views
1

私は何時間も問題なく運行しています。私は矢印キーに拘束された動きを持っていて、ユーザーはマウスを介して見回します。私が撃つとき、私はそれが最初に始まった方向にそれを続けたいが、何が起こるかは、弾道がそれで方向を変えるマウスを動かす場合である。マウスの動きに追従してリストに箇条書きが表示される

var myTimer2:Timer = new Timer(50); 
var list:Array = new Array(); 

myTimer2.addEventListener(TimerEvent.TIMER, timerListener2); 
myTimer2.start(); 

stage.addEventListener(MouseEvent.CLICK, shoot); 
function shoot(shooteven:Event) 
{ 
    var Create:Bullet = new Bullet(); 
    addChild(Create); 
    Create.x = player_obj.x; 
    Create.y = player_obj.y; 
    list.push(Create); 
} 

function timerListener2(e:TimerEvent):void 
{ 
    moveBullets(); 
} 

function moveBullets():void 
{ 
    var target:Bullet; 
    for (var i:int=0; i<list.length; i++) 
    { 
     target = Bullet(list[i]); 
     target.currentPlayerRotation = player_obj.rotation; 
     target.x +=Math.cos((target.currentPlayerRotation)*degreesToRadians) *10; 
     target.y +=Math.sin((target.currentPlayerRotation)*degreesToRadians) *10; 
    } 
} 

これは「プレイヤー」がカーソルをたどるために私が最初に使用するコードです。

stage.addEventListener("mouseMove", Follow); 
function Follow(e:MouseEvent):void 
{ 
    var a1 = mouseY - player_obj.y; 
    var b1 = mouseX - player_obj.x; 
    var radians1 = Math.atan2(a1,b1); 
    var degrees1 = radians1/(Math.PI/180); 
    player_obj.rotation = degrees1; 
} 

私が問題を引き起こしているものだと思うが、私は、配列の中に弾丸を押すと、彼らはすべてのマウスを動かす代わりに、彼らの初期値を維持するユーザの効果を共有しているということです。誰かがこれに関する入力を持っている場合、それは非常にappriciatedされ、長いポストのために残念です。

おかげで、 コール

答えて

1

は、そのコードを試してみてください。

var myTimer2:Timer = new Timer(50); 
var list:Array = new Array(); 

myTimer2.addEventListener(TimerEvent.TIMER, timerListener2); 
myTimer2.start(); 

stage.addEventListener(MouseEvent.CLICK, shoot); 
function shoot(shooteven:Event) 
{ 
    var Create:Bullet = new Bullet(); 
    addChild(Create); 
    Create.x = player_obj.x; 
    Create.y = player_obj.y; 
    Create.currentPlayerRotation = player_obj.rotation; 
    list.push(Create); 
} 

function timerListener2(e:TimerEvent):void 
{ 
    moveBullets(); 
} 

function moveBullets():void 
{ 
    var target:Bullet; 
    for (var i:int=0; i<list.length; i++) 
    { 
     target = Bullet(list[i]); 
     target.x +=Math.cos((target.currentPlayerRotation)*degreesToRadians) *10; 
     target.y +=Math.sin((target.currentPlayerRotation)*degreesToRadians) *10; 
    } 
} 
+0

おかげで、これは完璧にうまくいった。 –

1

私は前にこのような状況がありました。私が見つけることができる最良の解決策は、初期角度の正弦と余弦を格納するために、2つのプロパティを射影クラスに追加することでした。発射体の速度が決して変化しない場合は、代わりに発射体のdeltaXとdeltaYを保存することができます。 Bulletsの "currentPlayerRotation"プロパティはもう必要ありません。

あなたの撮影機能は、次のようになります。

function shoot(shooteven:Event) 
{ 
    var Create:Bullet = new Bullet(); 
    addChild(Create); 
    Create.x = player_obj.x; 
    Create.y = player_obj.y; 
    Create.dirCos = Math.cos((player_obj.rotation)*degreesToRadians); 
    Create.dirSin = Math.sin((player_obj.rotation)*degreesToRadians); 
    list.push(Create); 
} 

あなたの弾丸を動かすループは、画面上のすべての発射のための罪()/ COS()の呼び出しがない今という、あまりにも単純化されます。

for (var i:int=0; i<list.length; i++) 
{ 
    target = Bullet(list[i]); 
    target.x += target.dirCos * 10; 
    target.y += target.dirSin * 10; 
} 

私はこれがあなたを助けてくれることを願っています。

関連する問題