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

📄 democanvas.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 JAVA
字号:
package com.j2medev.chapter5;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.io.*;

public class DemoCanvas
        extends GameCanvas
        implements CommandListener, Runnable {
    private Image imgA,imgB;//飞机(imgA)和敌人(imgB)的Image对象
    private Image mapImg0,mapImg1;//背景0和背景1的Image对象
    private TiledLayer tiledLayer0;//背景0
    private TiledLayer tiledLayer1;//背景1
    private LayerManager layers;//管理所有层的层管理器
    private Sprite spriteA,spriteB;//声明精灵A和精灵B对象
    private int keyState;//按键状态
    private boolean collideSta;//状态变量,表示是否碰撞
    private Graphics g;//画笔的引用
    private int Ypos0;//可视窗口的纵坐标

    
    public DemoCanvas() {
        //构造GameCanvas,参数true意味着CameCanvas不会自动调用KeyPressed,keyRepeated,keyReleased方法
        super(true);
        //全屏
        this.setFullScreenMode(true);
        try {//初始化两个精灵的Image对象和两个背景的Image对象
            imgA = Image.createImage("/img0.png");
            imgB = Image.createImage("/img1.png");
            mapImg0 = Image.createImage("/map0.png");
            mapImg1 = Image.createImage("/map1.png");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        tiledLayer0 = new TiledLayer(9,20,mapImg0,28,28);//实例化背景层0,用mapImg0填充20行9列
        tiledLayer1 = new TiledLayer(12,11,mapImg1,21,40);//实例化背景层1,用mapImg1填充11行12列
        tiledLayer1.setPosition(-6,0);//初始化背景层1的位置

        int[][] map0 = {//背景层0的块儿分布(全用1号块儿填充)
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1},
            { 1,1,1,1,1,1,1,1,1}
            
        };
        
        
        int[][] map1 = {//背景层1的块儿分布(左侧用1号块儿填充,右侧用2号块儿填充,其它位置不填)
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
            { 1,0,0,0,0,0,0,0,0,0,0,2},
        };
        
        //利用map0中的地图信息填充背景层0
        for (int i = 0; i < map0.length; i++)
            for(int j = 0;j<map0[i].length;j++)
                tiledLayer0.setCell(j, i, map0[i][j]);
        

        spriteA = new Sprite(imgA,110,89);//实例化精灵A
        spriteB = new Sprite(imgB,80,80);//实例化精灵B
        
        spriteA.setPosition(50,100);//初始化精灵A的位置
        spriteB.setPosition(50,0);//初始化精灵B的位置
        
        layers= new LayerManager();//实例化一个层管理器

        layers.append(tiledLayer0);//将背景层添加到层管理器中
        
        Ypos0 = tiledLayer0.getHeight() - this.getHeight();//初始化背景层0的位置

        
        this.setFullScreenMode(true);//全屏
        setCommandListener(this);
        addCommand(new Command("Exit", Command.EXIT, 1));
        
        
        new Thread(this).start();//启动GameCanvas线程
    }
    
    public void check(){//碰撞检测
        if(spriteA.collidesWith(spriteB,true)) collideSta = true;
        else collideSta = false;
    }
    
    public void run() {
        while (true) {
            // repaint();
            this.g = getGraphics();//获取画笔
            keyState = getKeyStates();//获取按键状态
            //精灵A向左移动
            if((keyState & this.LEFT_PRESSED)!=0){
                spriteA.move(-3,0);
              }
            //精灵A向右移动
            if((keyState & this.RIGHT_PRESSED)!=0){
                spriteA.move(3,0);
            }
            //精灵A向上移动
            if((keyState & this.UP_PRESSED)!=0){
                spriteA.move(0,-3);
            }
            //精灵A向下移动
            if((keyState & this.DOWN_PRESSED)!=0){
                spriteA.move(0,3);
                
            }
            check();//碰撞检测

            this.draw(g);//调用自定义的画图方法
            
            try {
                Thread.sleep(33);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    public void draw(Graphics g) {
        //清屏
        g.setColor(0);
        g.fillRect(0,0,this.getWidth(),this.getHeight());
        //准备画下一帧
        spriteA.nextFrame();
        //实现背景0的循环滚动,实际上是可视窗口在循环滚动
        if(Ypos0<=0) Ypos0 = tiledLayer0.getHeight() - this.getHeight();
        
        //设置可视区域
        layers.setViewWindow(0,Ypos0,this.getWidth(),this.getHeight());
        //可视窗口向上移动
        Ypos0 = Ypos0-2;
        //画出层管理器中的所有层
        layers.paint(g,0,0);
        //画精灵A
        spriteA.paint(g);
        //刷新
        flushGraphics();
        
    }
    
    public void keyPressed(int keyCode) {
        //System.out.println(" ");
    }
    
    public void commandAction(Command command, Displayable displayable) {
        if (command.getCommandType() == Command.EXIT) {
            GameDemo.quitApp();
        }
    }
}

⌨️ 快捷键说明

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