天天看點

使用Canvas實作Splash

 遊戲中的開頭一般都需要使用閃屏(Splash Screen)來顯示開發商的相關資訊或者遊戲的背景等,是以一般情況下遊戲中的閃屏都多于一個,有兩個甚至更多,例如百寶箱中的遊戲中移動已經規定第一個閃屏必須是移動夢網的Logo,而第二個要出現百寶箱的logo。實作閃屏的方式有很多種,最合理的方式應該還是使用Canvas,因為閃屏過後的菜單或和遊戲主界面也是在Canvas或者GameCanvas上繪制,是以可以實作平滑的切換。

       下面的代碼給出了利用Canvas實作兩個Splash Screen的方式,當然如果願意的話,我們還可以在其中加入一些特效:

/*

 * HenCanvas.java

 *

 * Created on 2006年7月25日, 下午4:42

 */

import javax.microedition.lcdui.Canvas;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

/**

 * @author mydeman

public class HenCanvas extends Canvas implements Runnable{

  Image img1;

  Image img2;

  //splah的頁面索引

  int splash_index = 0;

  //每次循環的時間間隔

  private static final int INTERVAL = 100;

  public HenCanvas() {

    try {

      img2 = Image.createImage("/image2.png");

    } catch(Exception e) {}

    //設定全屏模式

    setFullScreenMode(true);

    //啟動線程

    Thread t = new Thread(this);

    t.start();

  }

  /**

   * 繪制方法

   */

  protected void paint(Graphics g) {

    switch(splash_index) {

      //繪制第一個閃屏

      case 0 :

        g.setColor(255, 255, 255);

        g.fillRect(0, 0, 240, 320);

        g.drawImage(img2, 120, 160, Graphics.HCENTER|Graphics.VCENTER);

        break;

      //繪制第二個閃屏

      case 1 :

        g.drawImage(img1, 120, 160, Graphics.HCENTER|Graphics.VCENTER);

    }

   * 運作

  public void run() {

    long curtime = 0;

    //得到剛開始運作的時間

    long oldtime = System.currentTimeMillis();

    while(true) {

      //獲得目前時間

      curtime = System.currentTimeMillis();

      switch(splash_index) {

        case 0 :

          //如果在第一個頁面停留了兩秒則開始顯示第二個頁面

          if(curtime > oldtime + INTERVAL * 20) {

            img2 = null;

            System.gc();

            splash_index = 1;

            try {

              img1 = Image.createImage("/image1.png");

            } catch(Exception e) {}

            //重新整理螢幕

            refresh();

          }

          break;

      }

   * 重新整理螢幕

  private final void refresh() {

    repaint();

    serviceRepaints();

}

繼續閱讀