2012-05-30 94 views
0

我正在與一羣在屏幕上運行的怪物一起玩這個視頻遊戲。問題在於怪物經過某個區域(超過y座標)並且必須一直回到頂部。我收到了一個建議,讓這個傳輸從下到上延遲了一段隨機時間(0,1,2或3秒)。現在,它只是沒有任何中斷地上升到頂端。我的問題是實施這個突破。我嘗試了各種方法,如循環停滯,如下圖所示無線程序暫停程序

  // if(monster is below 400 on y-axis 
     if(sbgBackFootY[ i ] >= 400) { 
      // random number that determines how long it will take to go to top 
      int randCo = (int) (Math.random() * 3); 

      if(randCo == 0) { 
       //moves monster to top 
       sbgHeadX[ i ] = 200; 
       sbgHeadY[ i ] = 80; 
       sbgMouthX[ i ] = 206; 
       sbgMouthY[ i ] = 110; 
       sbgBackX[ i ] = 190; 
       sbgBackY[ i ] = 95; 
       sbgBackFootX[ i ] = 190; 
       sbgBackFootY[ i ] = 115; 
       sbgFrontFootX[ i ] = 197; 
       sbgFrontFootY[ i ] = 115; 
       sbgLeftEyeX[ i ] = 205; 
       sbgLeftEyeY[ i ] = 90; 
       sbgRightEyeX[ i ] = 215; 
       sbgRightEyeY[ i ] = 90; 
       sbgLeftEyebrowStartX[ i ] = 203; 
       sbgLeftEyebrowStartY[ i ] = 83; 
       sbgLeftEyebrowEndX[ i ] = 210; 
       sbgLeftEyebrowEndY[ i ] = 90; 
       sbgRightEyebrowStartX[ i ] = 220; 
       sbgRightEyebrowStartY[ i ] = 83; 
       sbgRightEyebrowEndX[ i ] = 215; 
       sbgRightEyebrowEndY[ i ] = 90; 

      } 

      if(randCo == 1) { 
       //loop is supposed to stall program 
       for(int w = 0; w <= 1000000000; w++){ 
        SBGco[ i ]++; 
       } 

       if(SBGco[ i ] == 1000000000) { 
        //moves monster to top 
        sbgHeadX[ i ] = 200; 
        sbgHeadY[ i ] = 80; 
        sbgMouthX[ i ] = 206; 
        sbgMouthY[ i ] = 110; 
        sbgBackX[ i ] = 190; 
        sbgBackY[ i ] = 95; 
        sbgBackFootX[ i ] = 190; 
        sbgBackFootY[ i ] = 115; 
        sbgFrontFootX[ i ] = 197; 
        sbgFrontFootY[ i ] = 115; 
        sbgLeftEyeX[ i ] = 205; 
        sbgLeftEyeY[ i ] = 90; 
        sbgRightEyeX[ i ] = 215; 
        sbgRightEyeY[ i ] = 90; 
        sbgLeftEyebrowStartX[ i ] = 203; 
        sbgLeftEyebrowStartY[ i ] = 83; 
        sbgLeftEyebrowEndX[ i ] = 210; 
        sbgLeftEyebrowEndY[ i ] = 90; 
        sbgRightEyebrowStartX[ i ] = 220; 
        sbgRightEyebrowStartY[ i ] = 83; 
        sbgRightEyebrowEndX[ i ] = 215; 
        sbgRightEyebrowEndY[ i ] = 90; 

       } 
      } 

但計算機計算速度太快,所以將W變量變成10億太快。另一種方法是通過創建線程並使用Thread.sleep(randCo)或其他方法,但我試圖不使用多線程。有沒有其他辦法可以做到這一點?

回答

1

您可能更適合爲您的精靈預先計算路徑,然後爲其指定速度。然後,在「繪製」步驟中,根據精靈的路徑,速度和時間計算位置。

1

我認爲Thread.sleep(..)是你最好的選擇。如果你有一個線程,而你把它放到睡眠並不意味着你有多線程。

+0

不要以爲他可以睡覺。如果我理解他是正確的,那麼單線程渲染所有他的怪物,所以如果你線程睡眠,所有的怪物都會停下來(而不是僅僅是那些穿越邊界的怪物) – Michael

+0

@Michael在我讀了第二個問題後,我想你對了。他應該選擇安德魯的解決方案。 – tibtof

0

你爲什麼不保持的,他有多久關閉屏幕時間,然後把他回來時,他又回來了屏幕上:

int initTime= 0; 
int elapsedTimeOffScreen = 0 

if(sbgBackFootY[ i ] >= 400) { 
if(initTime!= 0) 
    initTime= DateTime.Now; 
elapsedTimeOfScreen = DateTime.Now - initTime; 

if(elapsedTimeOffscreen > 1000) 
{ 
    initTime = 0 
    elapsedTimeOffScreen = 0; 
//go back on screen 
} 

initTime將一次比一次重設字符 這將使用時間來檢查角色離開屏幕的時間。它肯定比使用cpu週期更可靠。

+0

不要氣餒,你的也不錯。我使用了你建議使用系統時間的部分。謝謝。 – kullalok