麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

游戲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://www.companysz.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 爱看久久 | 欧美一级爱爱 | 羞羞电影网 | 精品国产一区二区三区四区在线 | 国产永久免费观看 | 国产九色视频在线观看 | 毛片大全免费看 | 黄色电影免费网址 | 人禽l交免费视频 | 激情国产视频 | 91福利在线观看 | 精品久久久久久久久久中文字幕 | www.99热视频 | 7777视频| 韩国精品视频在线观看 | 亚洲极色| 一级国产精品一级国产精品片 | 精品一区二区三区在线观看国产 | 男男啪羞羞视频网站 | 成熟女人特级毛片www免费 | 亚洲白嫩在线观看 | 久久千人斩 | 一区播放 | 久久久久久久久久美女 | 国产乱淫av片免费观看 | 九九热在线视频观看 | 在线观看中文字幕av | 天天色狠狠干 | 亚洲无毛av| 国产精品欧美久久久久一区二区 | 国产九九热视频 | 久久成人亚洲 | 成人国产免费观看 | 中文字幕欧美一区二区三区 | 久久精品视频一区二区三区 | 日韩精品中文字幕在线观看 | 天天撸日日夜夜 | 好骚综合在线 | 一区二区三区日本在线观看 | 国产精品av久久久久久久久久 | 国产一国产精品一级毛片 |