⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initcanvas.java

📁 J2ME程序设计实例教程的源码
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import java.util.*;
import java.io.*;

/**
 * 该类描述了游戏启动时的初始界面。
 */
public class InitCanvas extends Canvas {
    private BoxMIDlet midlet;
    private Displayable nextScreen;     //初始界面的下一个显示界面
    private int screenWidth;    //屏幕的宽度
    private int screenHeight;   //屏幕的高度
    private Image img;          //显示的图片
    private Timer timer;    //定时器
    private int clipX;      //剪切矩形
    private int clipY;
    private int clipWidth;  //剪切矩形宽
    private int clipHeight; //剪切矩形高
    private int maxClipWidth;   //剪切矩形的最大宽度
    private int maxClipHeight;  //剪切矩形的最大高度
    private boolean first = true;   //
    
    //构造方法,创建一个初始显示界面,同时指定下一个显示界面。
    public InitCanvas(BoxMIDlet midlet, Displayable nextScreen) {
        this.midlet = midlet;
        this.nextScreen = nextScreen;
        screenWidth = this.getWidth();
        screenHeight = this.getHeight();
        try {
            img = Image.createImage("/img/init.png");
            maxClipWidth = img.getWidth();
            maxClipHeight = img.getHeight();
        }
        catch(IOException ie) {
            System.out.println("init-error: " + ie.toString());
        }
        if(screenWidth < maxClipWidth) {
            maxClipWidth = screenWidth;
        }
        if(screenHeight < maxClipHeight) {
            maxClipHeight = screenHeight;
        }
    }
    
    //画布显示前,系统将调用该方法。在该方法中,将创建并启动一个定时器
    protected void showNotify() {
        clipWidth = 0;
        clipHeight = 0;
        timer = new Timer();    //创建定时器
        TimerTask task = new TimerTask() {//定时器的任务
            //该方法是任务的执行体
            public void run() { //
                if(clipWidth >= maxClipWidth && clipHeight >= maxClipWidth) {
                    Display display = Display.getDisplay(midlet);
                    display.setCurrent(nextScreen);
                }
                
                clipWidth += 2;
                clipHeight +=2;
                clipX = (screenWidth - clipWidth)/2;
                clipY = (screenHeight - clipHeight)/2;
                repaint();
            }
        };
        
        //为定时器确定任务:100毫秒后执行任务task,之后每隔100毫秒执行一次任务task
        timer.schedule(task, 100, 100);
        first = true;
    }
    
    //绘制界面
    protected void paint(Graphics g) {
        if(first) { //第一次显示,清除画布
            g.setColor(0x00FFFFFF);
            g.fillRect(0, 0, screenWidth, screenHeight);
            first = false;
        }
        
        //设置剪切矩形,绘制图片及文字信息
        g.setClip(clipX, clipY, clipWidth, clipHeight);
        g.drawImage(img, screenWidth/2, screenHeight/2, Graphics.HCENTER|Graphics.VCENTER);
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE));
        g.drawString("推  箱  子", screenWidth/2, screenHeight/2, Graphics.HCENTER|Graphics.BOTTOM);
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
        g.drawString("作者:阳 光", screenWidth/2, screenHeight/2+30, Graphics.HCENTER|Graphics.BOTTOM);
    }
    
    //画布被从屏幕上移走后,系统马上调用该方法。
    protected void hideNotify() {
        timer.cancel(); //取消定时器
    }
    
    //显示画布
    public void show() {
        Display display = Display.getDisplay(midlet);
        display.setCurrent(this);
    }
    
    //进入下一界面。
    public void dismiss() {
        Display display = Display.getDisplay(midlet);
        display.setCurrent(nextScreen);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -