使用Canvas實現Splash

來源:互聯網
上載者:User
 遊戲中的開頭一般都需要使用閃屏(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.setColor(255, 255, 255);
        g.fillRect(0, 0, 240, 320);
        g.drawImage(img1, 120, 160, Graphics.HCENTER|Graphics.VCENTER);
        break;
    }
  }
 
  /**
   * 運行
   */
  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();
  }
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.