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

📄 maincanvas.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 JAVA
字号:
package com.j2medev.chapter3;

import java.io.IOException;
import javax.microedition.lcdui.*;

class MainCanvas extends Canvas implements Runnable{
    
    private Image bg = null;//背景图片
    private Image img = null;//原始精灵图片
    private Image[][] sprite = new Image[4][3];//代表精灵序列
    //坐标变换的x,y
    private int tx = 0;
    private int ty = 0;
    //精灵运行的方向
    private boolean leftPressed = false;
    private boolean rightPressed = false;
    private boolean upPressed = false;
    private boolean downPressed = false;
    //dir和seq共同确定当前显示哪个精灵,dir代表行,seq代表列
    private int dir = 2;
    private int seq = 0;
    public static final int DISTANCE = 4;
    
    public MainCanvas(){
        try{
            bg = Image.createImage("/forest08.png");
            img = Image.createImage("/people.png");
            Image tmp = null;
            //将people.png分割生成sprite精灵数组
            for(int i=0;i<4;i++){
                for(int j=0;j<3;j++){
                    tmp = Image.createImage(24,32);
                    Graphics g = tmp.getGraphics();
                    g.translate(-24*j,-32*i);
                    g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
                    sprite[i][j]=Image.createImage(tmp);
                }
            }
            img = null;//释放img对象
            new Thread(this).start();
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
    //通过线程和按键标记实现连续按键的效果
    public void run(){
        while(true){
            if(leftPressed){
                left();
            }else if(rightPressed){
                right();
            }else if(upPressed){
                up();
            }else if(downPressed){
                down();
            }
            
            try{
                Thread.sleep(100);
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
    
    public void left(){
        tx+=DISTANCE;
        repaint();
    }
    
    public void right(){
        tx-=DISTANCE;
        repaint();
    }
    public void up(){
        ty+=DISTANCE;
        repaint();
    }
    public void down(){
        ty-=DISTANCE;
        repaint();
    }
    
    public void paint(Graphics g){
        //清除前一屏幕
        int color = g.getColor();
        g.setColor(0xFF0FFF);
        g.fillRect(0,0,getWidth(),getHeight());
        g.setColor(color);
//        g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
        for(int i = 0;i<4;i++){
            for(int j=0;j<3;j++){
                g.drawImage(sprite[i][j],24*j,32*i,Graphics.LEFT|Graphics.TOP);
            }
        }
        //变化坐标,绘制背景图片
        g.translate(tx,ty);
        g.drawImage(bg,getWidth()/2,getHeight()/2,Graphics.HCENTER|Graphics.VCENTER);
        g.translate(-tx,-ty);
        //更换精灵序列,总在同一位置绘画精灵,运动的是背景而不是精灵
        seq = ++seq%3;
        g.drawImage(sprite[dir][seq],getWidth()/2,getHeight()/2,Graphics.HCENTER|Graphics.VCENTER);
    }
    
    public void keyPressed(int keyCode){
        int action = getGameAction(keyCode);
        //根据按键的方向判断应该使用哪个方向的精灵,与sprite数组对应
        switch(action){
            case DOWN:
                downPressed = true;
                dir = 2;
                break;
            case UP:
                upPressed = true;
                dir = 0;
                break;
            case LEFT:{
                leftPressed = true;
                dir = 3;
                break;
            }case RIGHT:{
                rightPressed = true;
                dir = 1;
                break;
            }
            default:
                break;
        }
        repaint();
    }
    
    public void keyReleased(int keyCode){
        int action = getGameAction(keyCode);
        switch(action){
            case DOWN:
                downPressed = false;
                break;
            case UP:
                upPressed = false;
                break;
            case LEFT:{
                leftPressed = false;
                break;
            }case RIGHT:{
                rightPressed = false;
                break;
            }
            default:
                break;
        }
        repaint();
    }
}

⌨️ 快捷键说明

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