編輯:高級開發
下文詳細說明介紹android 調用update的具體學習方法以及詳細工作學習,當休眠的時間已經到了,首先去調用update,即為下一次繪制做准備工作,再讓自己休眠起來,最後通知系統重繪制自己。
然後等到蘇醒後在Handler中就會讓系統區繪制上次修改過的二維方塊地圖,然後再次android 調用update,如此循環反復,生生不息),才使得游戲不斷被推進,因此,比做“引擎“不為過。
既然update是游戲的動力,要讓游戲停止下來只要不再android 調用update就可以了(因為此時其實是畫面靜止了),因此游戲進入暫停(這個狀態還可以轉為“運行“。其實就是繼續可以修改,再繪制)
- public void update()
- {
- if (mMode == RUNNING)
- {
- long now = System.currentTimeMillis();
- if (now - mLastMove > mMoveDelay)
- {
- clearTiles();
- updateWalls();
- updateSnake();
- updateApples();
- mLastMove = now;
- }
- mRedrawHandler.sleep(mMoveDelay);
- }
若進入失敗(其實此時二維方塊地圖還停留在最後一個畫面處,這也是為什麼在開始時要首先清理掉整個地圖)【這一點,可以在游戲失敗後,再次開始新游戲,此時通過設置的斷點即可觀察到上次游戲運行時的底層數據】。
可是個人認為Snake下面這段代碼讀起來有點怪,有點像一個“先有雞,還是先有蛋?“的問題,導致我的思維邏輯上出現一個“怪圈“。
- switch (item.getItemId()) {
- case MENU_ITEM_DELETE: {
- // Delete the note that the context menu is for
- Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);
- getContentResolver().delete(noteUri, null, null);
- return true;
- }
- }
- return false;
按照這段代碼的意思來看,當休眠的時間已經到了,首先去android 調用update,即為下一次繪制做准備工作,再讓自己休眠起來,最後通知系統重繪制自己。哎,這讓我難以理解,還是回到時刻0的例子來說,在時刻0時讓蛇身向北前進了一步(指的是底層的二維方格地圖的修改,不是界面)。
然後讓自己休眠0.6毫秒,當時間到了,首先去android 調用update方法,那麼就又會讓蛇身做出修改,也就是把上一次還沒繪制的覆蓋掉了(那麼上一次的修改豈不是白費,還沒畫上去呢)。
更何況在update中又會讓自己去休眠(還沒調用invalidate,怎麼又去休眠了?),又怎麼還能去通知系統調用我的onDraw方法呢?也就是說invalidate根本沒有執行???按我的理解,應該把順序顛倒一下,先通知系統去調用onDraw方法重繪,使得上一次對底層二維方格地圖的修改顯示出來。
然後再去為下一次修改做准備工作,最後讓自己進入休眠,等待蘇醒過來,如此循環反復。實驗證明,顛倒過來也是正確的,不過關於這一個迷惑我的地方,希望有朋友能指點我一下!記得在javascript裡使用setInterval時,也是先寫處理邏輯,然後在末尾處寫上一句setInterval(這也是我習慣的思維方式了),難道google上面這種寫法有何深意?
此外,感覺每次繪制時都重新繪制牆壁,有點浪費時間,因為牆壁根本沒有任何變化的。還有就是mLastMove這個變量設置的初衷是保證當前時間點距上一次變化已經過去了mMoveDelay毫秒,可是既然已經用了sleep機制,再使用這個時間差看上去並無必要。
事半功倍的效果,在一堆同類的軟件中,下載量最大的,一定是讓用戶用著感覺最舒服的,哪怕它的功能並不比其他的產品出色,甚至略差一些。我見過很多開發人員,他們視技術為己任,一
android手機作為谷歌企業戰略的重要組成部分,將進一步推進“隨時隨地為每個人提供信息”這一企業目標的實現。我們發現,全球為數眾多的移動電話用戶從未使用過任何基於 a
TCP和UDP在網絡傳輸中非常重要,在android開發中同樣重要。51CTO推薦專題:android應用開發詳解首先我們來看一下什麼是TCP和UDP。什麼是TCP?T
Google已經發布了android SDK 2.3版本,大家應該都在等android 2.3的升級吧?在51CTO獨家公布了android SDK 2.3下載地址後.