国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

游戲Loaading的設計

2019-11-18 16:11:32
字體:
來源:轉載
供稿:網友

        為什么很多游戲要加入Loading滾動條呢?加入Loading狀態并不是為了使軟件顯得更專業美觀,而是為了保證程序的運行內存不溢出。通常計算機/手機的存儲系統分為:cup 的緩存,磁盤(或者手機中的存儲用的的Flash RAM或者其他類型的可以持久保存的存儲系統),運行內存。我們知道通常NOKIA S40的heap size為200KB大小,而通常我們加入程序和3張128*128的圖片之后內存就趨于崩潰了,再加入聲音和地圖,程序的運算內存就顯得太不夠了。一般來講,很多游戲僅僅在運行的時候把所有的資源一次性讀入heap memory這樣,我們在模擬器看到程序運行的狀況就非常接近崩潰的邊緣,如果不小心加入了新的圖片,可能就沒有足夠的運算內存了。

         我們如何解決heap size不夠的事情呢?手機是不能夠改變其heap size的,我們只有想辦法控制heap memory的使用。最直觀的做法就是:存儲內存與運算內存的優化使用,當運算內存需要資源時從存儲內存中調用,需要新的資源時,就把不需要的釋放掉。下面我就結合一段代碼解釋我們是如何制作Loading狀態的。

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

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 * Loading演示
 * @author gaogao
 * */
class MainCanvas
    extends Canvas
    implements Runnable {

//程序狀態
  static final int LOADING = 0;
  static final int GAMEING = 1;

//程序狀態控制器
  int state = LOADING;

//主線程
  Thread thread = null;
//是否loading完畢,
  boolean isLoaded = false;

//內部類,新開讀取資源的 線程
  class Loading
      implements Runnable {
    //內線程
    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() {}
}

(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 朝阳县| 蓝山县| 日喀则市| 盐亭县| 梁河县| 资源县| 禄劝| 田阳县| 高碑店市| 大渡口区| 黄浦区| 兰西县| 登封市| 桂东县| 孝义市| 禄丰县| 德庆县| 莲花县| 平定县| 黄龙县| 安丘市| 尼玛县| 胶州市| 阿拉善右旗| 石阡县| 木里| 固始县| 静乐县| 临沂市| 思南县| 卢氏县| 桂平市| 涟源市| 榕江县| 衡山县| 满洲里市| 遵义县| 顺平县| 宿松县| 大关县| 多伦县|