程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 游戲Loaading的設計

游戲Loaading的設計

編輯:J2ME
  為什麼許多游戲要加進Loading轉動條呢?加進Loading狀態並不是為了使軟件顯得更專業雅觀,而是為了保證程序的運行內存不溢出。通常盤算機/手機的存儲系統分為:cup 的緩存,磁盤(或者手機中的存儲用的的FlashRAM或者其他類型的可以持久保留的存儲系統),運行內存。我們知道通常NOKIA S40的heapsize為200KB大小,而通常我們加過程序和3張128*128的圖片之後內存就趨於崩潰了,再加進聲音和輿圖,程序的運算內存就顯得太不夠了。一般來講,許多游戲僅僅在運行的時候把所有的資源一次性讀進heapmemory這樣,我們在模仿器看到程序運行的狀態就非常接近崩潰的邊緣,假如不警惕加進了新的圖片,可能就沒有足夠的運算內存了。

        我們如何解決heap size不夠的事情呢?手機是不能夠轉變其heap size的,我們只有想措施把持heapmemory的應用。最直觀的做法就是:存儲內存與運算內存的優化應用,當運算內存需要資源時從存儲內存中調用,需要新的資源時,就把不需要的開釋掉。下面我就聯合一段代碼說明我們是如何制作Loading狀態的。

         眾所周知,Java是內置多線程的,我們可以應用兩個線程來解決loading的標題,一個讀資源的線程,一個繪制資源的線程。程序代碼:

import Javax.microedition.midlet.*;import Javax.microedition.lcdui.*; /** * Loading
Thread innerThread = null;  public Loading() { innerThread = new Thread(this); innerThread.start(); }  int counter = 100; public void run() { //模仿讀取資源 //把下面的東西改成讀取資源的代碼即可 while (counter > 0) { counter--; try { Thread.sleep(20); } catch (Exception ex) {} } //loading結束 isLoaded = true; } }   Loading loading = null;  public MainCanvas() { loading = new Loading(); thread = new Thread(this); thread.start();  }  int loadingCounter = 0;  //繪制.. public void paint(Graphics g) { g.setColor(0); g.fillRect(0, 0, getWidth(), getHeight()); switch (state) { case LOADING: { g.setColor(0XFFFFFF);  g.drawString("LOADING" + ">>>>>".substring(0, loadingCounter), getWidth() >> 1, getHeight() >> 1, Graphics.HCENTER | Graphics.TOP);  loadingCounter = ++loadingCounter % 5;  } break; case GAMEING: { g.setColor(0XFFFFFF); g.drawString("GAME", getWidth() >> 1, getHeight() >> 1, Graphics.HCENTER | Graphics.TOP); } break; } }  public void run() { while (true) { try { Thread.sleep(100); } catch (Exception ex) { } if (isLoaded) { loading = null; state = GAMEING; } repaint(0, 0, getWidth(), getHeight()); serviceRepaints(); } }}  public class Main extends MIDlet { MainCanvas mc;  public void startApp() {  if (mc == null) { mc = new MainCanvas(); Display disp = Display.getDisplay(this); disp.setCurrent(mc); } }  public void destroyApp(boolean bool) {}  public void pauseApp() {}}  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved