自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Android 調用update?

移動開發(fā) Android
怎么能更好的調用update就可以說是整個游戲的引擎,正是由于它的工作的重要因素,就好比是貪吃蛇正在吃蘋果一樣。

下文詳細說明介紹Android 調用update的具體學習方法以及詳細工作學習,當休眠的時間已經到了,首先去調用update,即為下一次繪制做準備工作,再讓自己休眠起來,***通知系統(tǒng)重繪制自己。

然后等到蘇醒后在Handler中就會讓系統(tǒng)區(qū)繪制上次修改過的二維方塊地圖,然后再次Android 調用update,如此循環(huán)反復,生生不息),才使得游戲不斷被推進,因此,比做“引擎“不為過。

既然update是游戲的動力,要讓游戲停止下來只要不再Android 調用update就可以了(因為此時其實是畫面靜止了),因此游戲進入暫停(這個狀態(tài)還可以轉為“運行“。其實就是繼續(xù)可以修改,再繪制)

  1. public void update()  
  2.     {  
  3.         if (mMode == RUNNING)  
  4.         {  
  5.             long now = System.currentTimeMillis();  
  6.             if (now - mLastMove > mMoveDelay)   
  7.             {  
  8.                 clearTiles();  
  9.                 updateWalls();  
  10.                 updateSnake();  
  11.                 updateApples();  
  12.                 mLastMove = now;  
  13.             }  
  14.             mRedrawHandler.sleep(mMoveDelay);  
  15.         } 

若進入失敗(其實此時二維方塊地圖還停留在***一個畫面處,這也是為什么在開始時要首先清理掉整個地圖)【這一點,可以在游戲失敗后,再次開始新游戲,此時通過設置的斷點即可觀察到上次游戲運行時的底層數據】。

可是個人認為Snake下面這段代碼讀起來有點怪,有點像一個“先有雞,還是先有蛋?“的問題,導致我的思維邏輯上出現一個“怪圈“。

  1. switch (item.getItemId()) {  
  2.          case MENU_ITEM_DELETE: {  
  3.              // Delete the note that the context menu is for  
  4.              Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);  
  5.              getContentResolver().delete(noteUri, null, null);  
  6.              return true;  
  7.          }  
  8.      }  
  9.      return false;  

按照這段代碼的意思來看,當休眠的時間已經到了,首先去Android 調用update,即為下一次繪制做準備工作,再讓自己休眠起來,***通知系統(tǒng)重繪制自己。哎,這讓我難以理解,還是回到時刻0的例子來說,在時刻0時讓蛇身向北前進了一步(指的是底層的二維方格地圖的修改,不是界面)。

然后讓自己休眠0.6毫秒,當時間到了,首先去Android 調用update方法,那么就又會讓蛇身做出修改,也就是把上一次還沒繪制的覆蓋掉了(那么上一次的修改豈不是白費,還沒畫上去呢)。

更何況在update中又會讓自己去休眠(還沒調用invalidate,怎么又去休眠了?),又怎么還能去通知系統(tǒng)調用我的onDraw方法呢?也就是說invalidate根本沒有執(zhí)行???按我的理解,應該把順序顛倒一下,先通知系統(tǒng)去調用onDraw方法重繪,使得上一次對底層二維方格地圖的修改顯示出來。

然后再去為下一次修改做準備工作,***讓自己進入休眠,等待蘇醒過來,如此循環(huán)反復。實驗證明,顛倒過來也是正確的,不過關于這一個迷惑我的地方,希望有朋友能指點我一下!記得在javascript里使用setInterval時,也是先寫處理邏輯,然后在末尾處寫上一句setInterval(這也是我習慣的思維方式了),難道google上面這種寫法有何深意?

此外,感覺每次繪制時都重新繪制墻壁,有點浪費時間,因為墻壁根本沒有任何變化的。還有就是mLastMove這個變量設置的初衷是保證當前時間點距上一次變化已經過去了mMoveDelay毫秒,可是既然已經用了sleep機制,再使用這個時間差看上去并無必要。

【編輯推薦】

  1. Android應用程序組建原理深入剖析 
  2. Android SMS短信服務相關概念簡述 
  3. PythonAndroid數據庫相關代碼解讀 
  4. PythonAndroid安裝卸載程序具體操作方法解析 
  5. Android應用程序的四個關鍵點 
責任編輯:chenqingxiang 來源: 人民郵電出版社
相關推薦

2009-11-09 10:50:30

WCF異步調用

2017-01-13 14:32:50

Azurewebhoo自動化AzureWebhook

2009-07-21 09:43:36

調用UpdatePanASP.NET

2021-04-26 05:33:54

Python異步編程

2010-10-08 16:01:17

mysql UPDAT

2020-06-30 08:23:00

JavaScript開發(fā)技術

2010-03-05 16:47:11

Android操作系統(tǒng)

2010-09-27 10:04:30

Sql Update語

2010-09-17 10:39:36

SQL中

2014-02-19 11:00:40

Software UpOS X OS X M

2009-07-14 16:16:04

JDBC update

2022-12-29 15:55:55

Windows 11

2010-09-09 15:04:29

SQL更新語句

2011-06-30 15:26:28

Update數據庫

2014-04-08 15:40:57

Windows 8.1

2019-10-18 13:40:10

Windows 10 Windows Up驅動程序

2020-09-30 08:07:46

如何優(yōu)化尾調用

2011-05-30 17:31:51

Android 模擬SD卡

2010-12-12 21:01:00

Android控件

2022-12-25 10:17:50

點贊
收藏

51CTO技術棧公眾號