2014-03-28 24 views
0

大家好,我在這裏遇到了一些麻煩。已經在這裏一個小時了,找不到解決方案。更改數字錯誤的值AS3

所以我有一個名爲_Bunny添加到舞臺上,像這樣的影片剪輯:

 _Bunny = new mcBunny; 
     stage.addChild(_Bunny); 
     _Bunny.x = (stage.stageWidth/2) - 225; 
     _Bunny.y = (stage.stageHeight/2) - 330; 

現在這是什麼_Bunny做的是在舞臺上水平從右我已經設置了像一個循環向左移動所以在ENTER_FRAME事件偵聽器:

private function bunnyView():void 
    { 
     _Bunny.x += nBunnySpeed; 

     if (_Bunny.x >=(stage.stageWidth/2) + 215) 
     { 
      _Bunny.gotoAndStop("leftView"); 
      nBunnySpeed--; 

     } 
     if (_Bunny.x <=(stage.stageWidth/2) - 215) 
     { 
      _Bunny.gotoAndStop("rightView"); 
      nBunnySpeed++; 
     } 


    } 

它的速度是nBunnySpeed等於5.現在我有我試圖改變nBunnySpeed的值的另一個函數說20每當nScore等於1,像這樣:

private function updateDifficulty():void 
    { 
     if (nScore >= 1) 
     { 
      //Increase Speed 

      nBunnySpeed = 20; 


     } 

,但在這是錯誤產生的是兔子拍攝過屏幕的右側,這是「+ X」不管我做什麼,這總是會發生。

任何人都可以看到我可能做錯了什麼?我不明白爲什麼會發生這種情況。請幫忙!

+0

你的帖子說「nScore等於1」,但代碼是「nScore」= = 1' - 檢查一個是否不正確。 –

+1

你應該檢查你的'updateDifficulty()'是否每幀沒有被調用一次。如果是的話,不要這樣做,因爲如果是這樣的話,無論你的速度改變代碼如何,你的nBunnySpeed都被設置爲20。 – Vesper

+0

@Vesper是的,我在Enter_Frame遊戲循環中調用了UpdateDifficulty()函數。但是,既然我刪除了它,我現在可以用它做什麼?如果沒有被檢查,我將如何更改號碼? – Nathan

回答

1

您需要某種標誌,表示難度已經更新。然後,當您撥打updateDifficulty時,它首先檢查是否真的需要現在更新速度,如果沒有,就返回。如果是的話,那麼你更新你的兔子的速度並設置該標誌,以便下一次該功能不會改變兔子的速度。

var diffUpdated:Boolean=false; 
private function updateDifficulty():void 
{ 
    if (diffUpdated) return; // here 
    if (nScore >= 1) 
    { 
     //Increase Speed 
     if (nBunnySpeed<0) nBunnySpeed=-20; 
      else nBunnySpeed = 20; // retain the direction of bunny's movement 
    } 
    diffUpdated=true; 
} 

現在,只要你想你的困難進行更新,你做diffUpdated=false;,瞧,兔子的速度將受此更新。然而,對於這個,你需要兩個以上的速度,也許一個爲10分,一個爲50,一個爲200.

+0

太棒了!一如既往,您幫助我弄清楚了這一點!我無法對您表示感謝。可以把兔子放在舞臺上嗎?如果我把速度更新爲50?當我嘗試這麼高的數字時,它似乎可以快速地屏幕離開屏幕,然後回到屏幕上並輕鬆地放棄對方,並重復。我認爲這跟bunnyView()函數有關,而且我發起nBunnySpeed ++這樣的速度的方式和 - ;但不太清楚如何去解決它。我試過,但不能讓它工作。任何想法爲什麼它發生? – Nathan

+0

NeverMind使用下面的max方法計算出來,謝謝vesper人。嘿,你還有那個塔防網站嗎?我仍然想要宣傳你的網站。我已經發布了我的第一個應用程序,這個第二個應用程序將在星期一之前。給我發電子郵件,如果你可以[email protected] – Nathan

1

你在這個函數

private function bunnyView():void 
{ 
    _Bunny.x += nBunnySpeed; 

    if (_Bunny.x >=(stage.stageWidth/2) + 215) 
    { 
     _Bunny.gotoAndStop("leftView"); 
     nBunnySpeed--; 

    } 
    if (_Bunny.x <=(stage.stageWidth/2) - 215) 
    { 
     _Bunny.gotoAndStop("rightView"); 
     nBunnySpeed++; 
    } 
} 

做的是檢查_Bunny是否是屏幕外與否。如果是這樣,nBunnySpeed將會是nBunnySpeed - 1.但是由於BunnySpeed = 20,它將會是20 + 19 + 18 + 17,仍然是正確的。如果你想把它變成BunnySpeed = -BunnySpeed,它會立即反轉並返回。

+0

該函數可以很好地改變兔子的位置,它可以適當地返回第四個位置。我將nBunnySpeed值更改爲一個更高的整數,例如當它以正向x方向飛離屏幕時,它會像20個整數那樣更改。 – Nathan