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

📄 mapcanvas.java

📁 一个老外写的一个j2me环境的rpg引擎
💻 JAVA
字号:
package mobileRPG.client;

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

public class MapCanvas extends Canvas implements Runnable {
	
    private Display display;
    private Thread thread;

    private int backgroundcolor = 0xFFFFFF;
    private int foregroundcolor = 0x000000;
    
	private Entity entity;
	private Image[][] layer;
	private boolean[][] needsRefresh;
	private int xSize, ySize;  
	private boolean refresh;

	public MapCanvas(Main main, String mapfile) {
    	
    	loadImages(main.getImageSet(), mapfile);
    	entity = new Entity(16, 16, 16, 16, main.getImageSet(), "/res/BlackMage.ent", this);
		
		refresh = true;
		
        display = Display.getDisplay(main);
        thread = new Thread(this);
        thread.start();
    }
	
	public void loadImages(ImageSet imageset, String file) {
		int x, y;
		ConfigFile cf = new ConfigFile(file);
		
		int[] d = cf.readIntArrayLine();
		xSize = d[0];
		ySize = d[1];
		
		layer = new Image[xSize][ySize];
		needsRefresh = new boolean[xSize][ySize];
		for (y = 0; y < ySize; y++) {
			d = cf.readIntArrayLine();
			for (x = 0; x < xSize; x++) {
				layer[x][y] = imageset.getImage(d[x]);
				needsRefresh[x][y] = true;
			}
		}
	}
	
	public void run() {
		
		while (true) {
        	entity.run();
            repaint();
            try {
                thread.sleep(50);
            } catch (Exception e) {
            	System.err.println(e.toString());
            }
        }
    }
    
	public void setNeedsRefresh(int x, int y) {
		needsRefresh[x][y] = true;
	}
	
	protected void update(Graphics g) {
		g.drawString("update", 16,16,Graphics.TOP|Graphics.LEFT);
		paint(g);
	}
	
	protected void paint(Graphics g) {
    	if (refresh) {
    		paintBGFull(g);
    		refresh = false;
    	}
		
        g.setColor(foregroundcolor);
		for (int y = 0; y < ySize; y++) {
			for (int x = 0; x < xSize; x++) {
				if (needsRefresh[x][y]) {paintTile(g, x, y);}
			}
		}
        
		entity.paint(g);
    }
    
 	protected void paintTile(Graphics g, int x, int y) {
 		g.drawImage(layer[x][y], x*16, y*16, Graphics.TOP|Graphics.LEFT);
		needsRefresh[x][y] = false;
 	}
    
    protected void paintBGFull(Graphics g) {
    	g.setColor(backgroundcolor);
        g.fillRect(0, 0, getWidth(), getHeight());

        g.setColor(foregroundcolor);
		for (int y = 0; y < ySize; y++) {
			for (int x = 0; x < xSize; x++) {
				paintTile(g, x, y);
			}
		}
    }
    
    protected void keyPressed(int keyCode) {
        entity.move(keyCode);
    }
}

⌨️ 快捷键说明

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