📄 mapcanvas.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 + -