📄 threadcanvas.java
字号:
package com.thinkenjoy.control;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
//#if NOK_7260 || NOK_7210 || NOK_6101 || NOK_6230i || NOK_7370 || NOK_QD || SON_K700C
//import com.nokia.mid.ui.FullCanvas;
//#endif
/**
* 绘制类,负责绘制Control类中的指向的界面
*/
//#if NOK_7260 || NOK_7210 || NOK_6101 || NOK_6230i || NOK_7370 || NOK_QD || SON_K700C
//public class ThreadCanvas extends FullCanvas implements Runnable{
//#else
public class ThreadCanvas extends Canvas implements Runnable {
//#endif
//#if NOK_7260
//# public static final short SCREEN_WIDTH = 128;
//# public static final short SCREEN_HEIGHT = 128;
//#else
//#if NOK_7370 || MOT_E2
//# public static final short SCREEN_WIDTH = 240;
//# public static final short SCREEN_HEIGHT = 320;
//#else
//#if NOK_6230i
//# public static final short SCREEN_WIDTH = 208;
//# public static final short SCREEN_HEIGHT = 208;
//#else
//#if NOK_6101
//# public static final short SCREEN_WIDTH = 128;
//# public static final short SCREEN_HEIGHT = 160;
//#else
public static final short SCREEN_WIDTH = 176;
public static final short SCREEN_HEIGHT = 208;
//#endif
//#endif
//#endif
//#endif
public static final int FPS = 50;
/**
* 最小休眠的时间,解决某些手机的按键延迟问题
*/
private static final int MIN_SLEEP = 5;
public static boolean flag = true;
public ThreadCanvas() {
//#if NOK_QD
//# start();
//#else
this.setFullScreenMode(true);
start();
//#endif
}
/**
* 由线程调用,通过其控制ActorCanvas子类的cycle方法
*
*/
public void cycle() {
if (Control.getDisplay() != null) {
Control.getDisplay().cycle();
}
}
/**
* 由线程调用,通过其控制ActorCanvas子类的paint方法
*
*/
public void paint(Graphics g) {
// paint waht you want
if (Control.getDisplay() != null) {
try {
//#if NOK_7210 || NOK_7260
//# g.setClip(0,0,128,128);
//#endif
//System.out.println("内存="+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
Control.getDisplay().paint(g);
//#ifdef debug
//# // 画剩余内存
//# g.setColor(0xffffff);
//# g.fillRect(0, ThreadCanvas.SCREEN_HEIGHT - 20, 88, 20);
//# g.setColor(0xff0000);
//# g.drawString("mem: " + Runtime.getRuntime().totalMemory() + ":"
//# + Runtime.getRuntime().freeMemory(), 0, ThreadCanvas.SCREEN_HEIGHT - 20, 0);
//#endif
} catch (Exception e) {
g.setColor(0xffffff);
g.fillRect(0, 20, ThreadCanvas.SCREEN_WIDTH, 60);
g.setColor(0xff0000);
System.out.println("error: " + e);
g.drawString("Exception: " + e, 0, 20, 0);
g.drawString("Exception: " + e, -ThreadCanvas.SCREEN_WIDTH, 40, 0);
g.drawString("Exception: " + e, -ThreadCanvas.SCREEN_WIDTH * 2, 60, 0);
}
}
}
/**
* the canvas thread start
*
*/
public void start() {
Thread t = new Thread(this);
t.start();
}
/**
* the thread begin run,the timers is used to count the times for outside
* called,control the cartoon's speed
*/
public void run() {
try {
while (flag) {
long lastTime = System.currentTimeMillis();
cycle();
repaint();
serviceRepaints();
long cycleTime = System.currentTimeMillis() - lastTime;
if (cycleTime < FPS) {
Thread.sleep(FPS - cycleTime);
} else {
Thread.sleep(MIN_SLEEP);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* the Canvas key pressed Action
*/
protected void keyPressed(int keyCode) {
if (Control.getDisplay() != null) {
int gameAction = getGameAction(keyCode);
if (gameAction == Canvas.UP) {
keyCode = KeyMap.UP;
} else if (gameAction == Canvas.DOWN) {
keyCode = KeyMap.DOWN;
} else if (gameAction == Canvas.LEFT) {
keyCode = KeyMap.LEFT;
} else if (gameAction == Canvas.RIGHT) {
keyCode = KeyMap.RIGHT;
} else if (gameAction == Canvas.FIRE) {
keyCode = KeyMap.FIRE;
} else if (keyCode == Canvas.KEY_NUM1) {
keyCode = KeyMap.NUM1;
} else if (keyCode == Canvas.KEY_NUM3) {
keyCode = KeyMap.NUM3;
} else if (keyCode == Canvas.KEY_NUM0) {
keyCode = KeyMap.NUM0;
} else if (isPressedLeftSoftKey(keyCode)) { // 左软键
keyCode = KeyMap.LEFT_SOFT;
} else if (isPressedRightSoftKey(keyCode)) { // 右软键
keyCode = KeyMap.RIGHT_SOFT;
}
Control.getDisplay().keyPressed(keyCode);
}
}
/**
* the Canvas key release Action
*/
protected void keyReleased(int keyCode) {
if (Control.getDisplay() != null) {
int gameAction = getGameAction(keyCode);
if (gameAction == Canvas.UP) {
keyCode = KeyMap.UP;
} else if (gameAction == Canvas.DOWN) {
keyCode = KeyMap.DOWN;
} else if (gameAction == Canvas.LEFT) {
keyCode = KeyMap.LEFT;
} else if (gameAction == Canvas.RIGHT) {
keyCode = KeyMap.RIGHT;
} else if (gameAction == Canvas.FIRE) {
keyCode = KeyMap.FIRE;
} else if (keyCode == Canvas.KEY_NUM1) {
keyCode = KeyMap.NUM1;
} else if (keyCode == Canvas.KEY_NUM3) {
keyCode = KeyMap.NUM3;
} else if (keyCode == Canvas.KEY_NUM0) {
keyCode = KeyMap.NUM0;
} else if (isPressedLeftSoftKey(keyCode)) { // 左软键
keyCode = KeyMap.LEFT_SOFT;
} else if (isPressedRightSoftKey(keyCode)) { // 右软键
keyCode = KeyMap.RIGHT_SOFT;
}
Control.getDisplay().keyReleased(keyCode);
}
}
/**
* 通用型,判断是否按下了 左软键 ***
*
* @param keyCode
* 键值
* @return
*/
private boolean isPressedLeftSoftKey(int keyCode) {
if (keyCode == -6 || keyCode == 6 || keyCode == -21 || keyCode == 21
|| keyCode == -20) {
return true;
}
return false;
}
/**
* 通用型,判断是否按下了 右软键 ***
*
* @param keyCode
* 键值
* @return
*/
private boolean isPressedRightSoftKey(int keyCode) {
if (keyCode == -7 || keyCode == 7 || keyCode == -22 || keyCode == 22
|| keyCode == -21) {
return true;
}
return false;
}
public void showNotify() {
if (!Control.isStartShowNotify) {
Control.isStartShowNotify = true;
} else {
Control.show(Control.MENU_STAGE);
}
}
public void hideNotify() {
Control.stopMusic();
Control.show(Control.MENU_STAGE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -