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

📄 testcanvas.java

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

public class TestCanvas extends GameCanvas implements Runnable {
    private TiledLayer wall;
    private Sprite hWorker;
    private Sprite vWorker;
    
    private int[] backArray= { //背景数组 
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1,
    };
    
    //搬运工在不同方向上的帧序列
    private int[] leftSequence = {3, 4, 5};
    private int[] rightSequence = {9, 10, 11};
    private int[] downSequence = {6, 7, 8};
    private int[] upSequence = {0, 1, 2};
    
    //绘图对象
    private Graphics g;
    
    //搬运工运动区域位置
    private int regionX;
    private int regionY;
    
    //搬运工线程
    private Thread workerThread;
    private boolean running = false;
    private int hd = 3; //水平移动距离
    private int vd = 2; //垂直移动距离
    
    
    public TestCanvas() {
        super(false);
        try {
            //创建并初始化背景
            Image imgWall = Image.createImage("/Storage.png");
            wall = new TiledLayer(10, 10, imgWall, 21, 21);
            for(int i=0; i<backArray.length; i++) {
                wall.setCell(i%10, i/10, backArray[i]);
            }
            
            //创建并初始化水平运动的搬运工
            Image imgWorker = Image.createImage("/Worker.png");
            hWorker = new Sprite(imgWorker, 21, 21);
            hWorker.setFrameSequence(leftSequence);
            
            //创建并初始化垂直运动的搬运工
            vWorker = new Sprite(hWorker);
            vWorker.setFrameSequence(downSequence);
        }
        catch(IOException ioe) {
        }
        g = getGraphics();
    }
    
    //画面显示前自动调用该方法,初始化背景、搬运工的位置,绘制背景
    //创建并启动搬运工线程
    public void showNotify() {
        int x = (getWidth()-210)/2;
        int y = (getHeight()-210)/2;
        regionX = x+21;
        regionY = y+21;
        wall.setPosition(x, y);
        wall.paint(g);
        hWorker.setPosition(x+21, y+105);
        vWorker.setPosition(x+105, y+21);
        workerThread = new Thread(this);
        running = true;
        workerThread.start();
    }
    
    //画面从屏幕上移走时自动调用该方法,停止搬运工线程
    public void hideNotify() {
        running = false;
    }
    
    public void run() {
        boolean trans = false;
        while(running) {
            //碰撞检测
            if(vWorker.collidesWith(hWorker, false)) {
                vd = -vd;
                tranceDirection(vWorker);
            }
            else  {
                if(vWorker.collidesWith(wall, false)) {
                    vd = -vd;
                    tranceDirection(vWorker);
                }
                if(hWorker.collidesWith(wall, false)) {
                    hd = -hd;
                    tranceDirection(hWorker);
                }
            }
            
            //搬运工移动,显示帧序列中的下一帧
            vWorker.move(0, vd);
            vWorker.nextFrame();
            hWorker.move(hd, 0);
            hWorker.nextFrame();
            
            //清除搬运工运动区域
            g.setColor(0x00FFFFFF);
            g.fillRect(regionX, regionY, 168, 168);
            
            //绘制搬运工
            hWorker.paint(g);
            vWorker.paint(g);
            
            //绘制结果显示到屏幕
            flushGraphics();
            
            try {
                Thread.sleep(44);
            }
            catch(InterruptedException ie) {
                //
            }
        }
    }
    
    //搬运工worker转向
    private void tranceDirection(Sprite worker) {
        if(worker == hWorker) {
            if(hd > 0) {
                worker.setFrameSequence(leftSequence);
            }
            else {
                worker.setFrameSequence(rightSequence);
            }
        }
        else if(worker == vWorker) {
            if(vd > 0) {
                worker.setFrameSequence(downSequence);
            }
            else {
                worker.setFrameSequence(upSequence);
            }
        }
    }
}

⌨️ 快捷键说明

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