2015-12-25 141 views
0

當我移動光標時,播放器按照預期從左向右翻轉。但是,當我將光標保持在屏幕中間時(不是移動光標,而是使用「WASD」鍵的玩家),並讓我的玩家向光標移動並走過它。然後玩家會將比例更改爲水平。但是,在它縮放之前,播放器內部的兒童(玩家的手臂,炮塔)會在改變水平刻度之前閃爍並縮放。as3 - 當水平翻轉動畫片時,動畫片會閃爍?

這是我的代碼位於播放器的容器內,它是「PageOne」類。

if (mouseX > player.x) 
     { 

      player.playerStand.scaleX = 1; 
      player.turret.scaleY = 1; 
      player.armBottom.scaleY = 1; 
      player.armTop.scaleY = 1; 
      crosshair.x = mouseX; 

     } 
     else if (mouseX < player.x) 
     { 

      player.playerStand.scaleX = -1; 
      player.turret.scaleY = -1; 
      player.armBottom.scaleY = -1; 
      player.armTop.scaleY = -1; 
      crosshair.x = mouseX; 
     } 

因此,我試圖讓玩家的孩子在水平翻轉之前不閃爍,而是立即改變水平形狀。具有ScaleX的動畫片段不閃爍,但使用scaleY的孩子有這個閃爍的問題。通過閱讀可能有點難以理解,所以我在下面添加了一個文件。

以下是文件:https://www.dropbox.com/s/2lf17oj29iuk761/Subject%20Unstable.zip?dl=0

回答

0

的閃爍不被scaleY特性造成的。它是由Player課程內部的旋轉條件引起的。按照下面的步驟:

首先對pageOne類刪除scaleY屬性:

private function onEnterFrame(event: Event): void 
{ 
    crosshair.x += (mouseX - crosshair.x)/5; 
    crosshair.y += (mouseY - crosshair.y)/5; 

    player.scaleX = (mouseX > player.x) ? 1 : -1; 
} 

接下來,你需要修復炮塔的旋轉角度上Player類:

var angle = Math.atan2(dy, dx)/Math.PI * 180; 

if(armBottom.parent.scaleX < 0) angle = 180 - angle; 

下一步刪除所有的旋轉條件,只剩下元素旋轉:

if (armBottom.currentFrame != 3) 
{ 
    armBottom.rotation = angle; 
} 

if (armTop.currentFrame != 3) 
{ 
    armTop.rotation = angle; 
} 

turret.rotation = angle; 

你會注意到閃爍不會產生,但現在不會成爲手臂旋轉的限制。

您必須檢查的角度值,而不是檢查元素的旋轉,這將是更加輕鬆更乾淨:

if(armBottom.parent.scaleX < 0) angle = 180 - angle; 

// Limit the rotation between -30º and 30 
// If you want other values change this part. 
if(armBottom.parent.scaleX > 0) 
{ 

    if(angle >= -180 && angle < -30) angle = -30; 
    if(angle > 30 && angle <= 180) angle = 30; 

} 
else 
{ 

    if(angle < 330 && angle >= 180) angle = 330; 
    if(angle > 30 && angle < 180) angle = 30; 

}  

if (armBottom.currentFrame != 3) 
{ 
    armBottom.rotation = angle; 
    armTop.rotation = angle; 
}    

turret.rotation = angle; 
+0

有沒有辦法通過保持旋轉限制辦呢? – Crook

+0

是的,有一種方法。看看我的版本。 – ElChiniNet

+0

非常感謝! – Crook