2013-03-20 51 views
0

所以,我試圖讓我的遊戲中的一些小行星隨機移動,如果你碰到一個,它會移動到其他地方,並有一個新的,也是隨機的飛行路徑。我的問題是,當我撞到一顆小行星時,它確實創造了一條新路,但如果我擊中它3次以上,它就會一直重置到同一路徑上的相同位置。誰能幫我這個? (Regular Layer) import flash.events.Event; addEventListener(Event.ENTER_FRAME,massGain); stop();無法獲得真正隨機的結果AS3

var speedX = (Math.random() * 20 - 10); 
var speedY = (Math.random() * 20 - 10); 
var speedX1 = (Math.random() * 20 - 10); 
var speedY1 = (Math.random() * 20 - 10); 
var speedX2 = (Math.random() * 20 - 10); 
var speedY2 = (Math.random() * 20 - 10); 
var speedX3 = (Math.random() * 20 - 10); 
var speedY3 = (Math.random() * 20 - 10); 
var speedX4 = (Math.random() * 20 - 10); 
var speedY4 = (Math.random() * 20 - 10); 
var speedX5 = (Math.random() * 20 - 10); 
var speedY5 = (Math.random() * 20 - 10); 
var speedX6 = (Math.random() * 20 - 10); 
var speedY6 = (Math.random() * 20 - 10); 




function massGain(e:Event) 
{ 



Mouse.hide(); 

Cosmo.x = mouseX; 
Cosmo.y = mouseY; 

Asteroid5.x = Asteroid5.x + speedX; 
Asteroid5.y = Asteroid5.y + speedY; 
if (Asteroid5.x > 1100 || Asteroid5.x < -100) 
{ 
    speedX = -speedX 
} 
if (Asteroid5.y > 800 || Asteroid5.y < -100) 
{ 
    speedY = -speedY 
} 

Asteroid6.x = Asteroid6.x + speedX1; 
Asteroid6.y = Asteroid6.y + speedY1; 
if (Asteroid6.x > 1100 || Asteroid6.x < -100) 
{ 
    speedX1 = - speedX1; 
} 
if (Asteroid6.y > 800 || Asteroid6.y < -100) 
{ 
    speedY1 = - speedY1; 
} 

Asteroid7.x = Asteroid7.x + speedX2; 
Asteroid7.y = Asteroid7.y + speedY2; 
if (Asteroid7.x > 1100 || Asteroid7.x < -100) 
{ 
    speedX2 = - speedX2; 
} 
if (Asteroid7.y > 800 || Asteroid7.y < -100) 
{ 
    speedY2 = - speedY2; 
} 

Asteroid8.x = Asteroid8.x + speedX3; 
Asteroid8.y = Asteroid8.y + speedY3; 
if (Asteroid8.x > 1100 || Asteroid8.x < -100) 
{ 
    speedX3 = - speedX3; 
} 
if (Asteroid8.y > 800 || Asteroid8.y < -100) 
{ 
    speedY3 = - speedY3; 
} 

Deathroid1.x = Deathroid1.x + speedX4; 
Deathroid1.y = Deathroid1.y + speedY4; 
if (Deathroid1.x > 1100 || Deathroid1.x < -100) 
{ 
    speedX4 = - speedX4; 
} 
if (Deathroid1.y > 800 || Deathroid1.y < -100) 
{ 
    speedY4 = - speedY4; 
} 

Deathroid2.x = Deathroid2.x + speedX5; 
Deathroid2.y = Deathroid2.y + speedY5; 
if (Deathroid2.x > 1100 || Deathroid2.x < -100) 
{ 
    speedX5 = - speedX5; 
} 
if (Deathroid2.y > 800 || Deathroid2.y < -100) 
{ 
    speedY5 = - speedY5; 
} 

Deathroid3.x = Deathroid3.x + speedX6; 
Deathroid3.y = Deathroid3.y + speedY6; 
if (Deathroid3.x > 1100 || Deathroid3.x < -100) 
{ 
    speedX6 = - speedX6; 
} 
if (Deathroid3.y > 800 || Deathroid3.y < -100) 
{ 
    speedY6 = - speedY6; 
} 

} 

(操作層) VAR mySound1:聲音=新menuSelectionClick(); var mySound2:Sound = new explosion(); var nCount1:Number = 0;

timer_Text1.text = nCount1.toString(); 
addEventListener(Event.ENTER_FRAME,massCollect); 

function massCollect(e:Event) 
{ 

if (Cosmo.hitTestObject(Asteroid5)) 
{ 

    mySound1.play(); 
    nCount1++; 
    timer_Text1.text = nCount1.toString(); 

    Asteroid5.y = (Math.random() * 20 - 5); 
    Asteroid5.x = (Math.random() * 20 - 15); 
    Asteroid5.x = Asteroid5.x + (Math.random() * 20 - 15);//+ speedAgainX1; 
    Asteroid5.y = Asteroid5.y + (Math.random() * 20 - 5);//+ speedAgainY1; 
} 

if (Asteroid5.x > 1100 || Asteroid5.x < -100) 
{ 
    Asteroid5.x = Asteroid5.x * -1; 

} 

if (Asteroid5.y > 800 || Asteroid5.y < -100) 
{ 
    Asteroid5.y = - Asteroid5.y * -1; 

} 

if (Cosmo.hitTestObject(Asteroid6)) 
{ 

    mySound1.play(); 
    nCount1++; 
    timer_Text1.text = nCount1.toString(); 

    Asteroid6.y = (Math.random() * 20 - 5); 
    Asteroid6.x = (Math.random() * 20 - 15); 
    //Asteroid6.x = Math.floor(Math.random() * 20 - 15); 
    // Asteroid6.y = Math.floor(Math.random() * 20 - 5); 
    Asteroid6.x = Asteroid6.x + (Math.random() * 20 - 15);//+ speedAgainX1; 
    Asteroid6.y = Asteroid6.y + (Math.random() * 20 - 5);//+ speedAgainY1; 
} 

if (Asteroid6.x > 1100 || Asteroid6.x < -100) 
{ 
    Asteroid6.x = - Asteroid6.x * -1; 
} 

if (Asteroid6.y > 800 || Asteroid6.y < -100) 
{ 
    Asteroid6.y = - Asteroid6.y * -1; 

} 


if (Cosmo.hitTestObject(Asteroid7)) 
{ 

    mySound1.play(); 
    nCount1++; 
    timer_Text1.text = nCount1.toString(); 

    Asteroid7.y = (Math.random() * 20 - 5); 
    Asteroid7.x = (Math.random() * 20 - 15); 
    Asteroid7.x = Asteroid7.x + (Math.random() * 20 - 15);//+ speedAgainX1; 
    Asteroid7.y = Asteroid7.y + (Math.random() * 20 - 5);//+ speedAgainY1; 
} 
if (Asteroid7.x > 1100 || Asteroid7.x < -100) 
{ 
    Asteroid7.x = - Asteroid7.x * -1; 

} 

if (Asteroid7.y > 800 || Asteroid7.y < -100) 
{ 
    Asteroid7.y = - Asteroid7.y * -1; 

} 

if (Cosmo.hitTestObject(Asteroid8)) 
{ 

    mySound1.play(); 
    nCount1++; 
    timer_Text1.text = nCount1.toString(); 

    Asteroid8.y = (Math.random() * 20 - 5); 
    Asteroid8.x = (Math.random() * 20 - 15); 
    Asteroid8.x = Asteroid8.x + (Math.random() * 20 - 15);//+ speedAgainX1; 
    Asteroid8.y = Asteroid8.y + (Math.random() * 20 - 5);//+ speedAgainY1; 
} 

if (Asteroid8.x > 1100 || Asteroid8.x < -100) 
{ 
    Asteroid8.x = - Asteroid8.x * -1; 

} 

if (Asteroid8.y > 800 || Asteroid8.y < -100) 
{ 
    Asteroid8.y = - Asteroid8.y * -1; 

} 

if (Cosmo.hitTestObject(Deathroid1)) 
{ 
    mySound2.play(); 
    removeEventListener(Event.ENTER_FRAME,massCollect); 
    removeEventListener(Event.ENTER_FRAME,massGain); 
    gotoAndStop(352, "Scene 1"); 
} 
if (Cosmo.hitTestObject(Deathroid2)) 
{ 
    mySound2.play(); 
    removeEventListener(Event.ENTER_FRAME,massCollect); 
    removeEventListener(Event.ENTER_FRAME,massGain); 
    gotoAndStop(352, "Scene 1"); 
} 

if (Cosmo.hitTestObject(Deathroid3)) 
{ 
    mySound2.play(); 
    removeEventListener(Event.ENTER_FRAME,massCollect); 
    removeEventListener(Event.ENTER_FRAME,massGain); 
    gotoAndStop(352, "Scene 1"); 
} 

if (nCount1 >= 25) 
{ 
    removeEventListener(Event.ENTER_FRAME,massCollect); 
    removeEventListener(Event.ENTER_FRAME,massGain); 
    gotoAndStop(351, "Scene 1"); 

} 
} 
+0

哦,親愛的上帝,沒有任何東西 – austinbv 2013-03-20 00:38:13

+0

...我假設這是壞的..我是一個非常入門級的編碼器。 – user2072135 2013-03-20 00:55:31

+2

我認爲austinbv試圖說的是,你的代碼真的很難閱讀。您應該編輯您的問題以僅顯示代碼中有問題的部分。由於ActionScript-3是一種面向對象的語言,因此您應該學習如何創建類並將重複代碼分解爲函數 – duTr 2013-03-20 02:02:22

回答

0

我沒有看到你的代碼在hitTestObject分配爲Asteroid6速度和其他新的價值。這很可能是你的問題的根源。

但是,看起來您需要更多的幫助,而不僅僅是這個 - 您至少有3個相似的對象,以及3組控制它們的相同代碼。首先,關於Array的研究,您可以使用它對小行星進行分組,然後遍歷它,對每個小行星應用一個相同的代碼。第二,關於類的研究,畢竟那些小行星是一類的對象,即asteroid,如「所有* 小行星 * s」。所以,建立一個類Asteroid,放置一個方法來做你的隨機賦值,確保小行星的速度也被更新,並且提出另一種方法,如果座標超出範圍,將通過速度和更新速度值來移動小行星。 。順便說一句,您可以繪製一個小行星並將其用作圖書館資源,如果您爲其分配與您班級相同的名稱,那麼當您需要動態製作小行星時,則無需重新制作圖形!

+0

感謝您的提示,最近我深入瞭解自己的知識,期限非常緊張。我沒有重做圖像,我只是把它們從圖書館裏拿出來,重新調整大小。我現在要去學習數組和類。 – user2072135 2013-03-20 21:45:24