📄 mycanvas.java
字号:
package src;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class myCanvas extends Canvas implements Runnable, Static {
MyMidlet mid;
int SystemStead; // 当前系统状态
int i_canvasW, i_canvasH; // 屏幕宽高
Image huan3Chong1; // 定义一个双缓冲屏幕
Graphics g; // 定义一个缓冲区画笔
boolean is_gameRun; // 游戏是否运行
long systemTime;// 刷新频率时间
boolean is_up, is_down, is_left, is_right, is_fire;// 连续按键开关
Loading loading;//读取资源
//----------LOADING--------------------------------------------------
String loding[] = {"请","等","待",".",".",".","."};
int i_loading[] = new int[loding.length];
int i_loadSpeed = 2;
//----------logo------------------------------------------------------
String name_logo[] = {"res/cmcc_60","res/sp"};
long nowTime,oldTime;
Image img_logo;
int nowloge; //logo计数器
//-----------game-----------------------------------------------------
map nowMap;
man hero;
//--------------------------------------------------------------------
myCanvas(MyMidlet mid) {
this.mid = mid;
setFullScreenMode(true); // 设置全屏
i_canvasW = 240; // 屏幕宽
i_canvasH = 320; // 屏幕高
// 建立缓冲
huan3Chong1 = Image.createImage(i_canvasW, i_canvasH);
// 取得缓冲区画笔
g = huan3Chong1.getGraphics();
is_gameRun = true;
is_up = is_down = is_left = is_right = is_fire = false;
SystemNext(LOGO);
new Thread(this).start();
}
/**
* 切换系统状态
* @param nextStead 下一个系统状态
*/
public void SystemNext(int nextStead){
SystemStead = LOADING;
loading = new Loading(this, nextStead);
}
/**
* 资源释放
* @param nowStead
*/
public void DataOut(int nowStead){
switch(nowStead){
case LOGO:
img_logo = null;
break;
case TITLE:
break;
case MENU:
break;
case GAME:
break;
case END:
break;
case OVER:
break;
}
}
/**
*连续按键
*/
public void keyLian2(){
if(is_up){
switch(SystemStead){
case GAME:
break;
}
}
if(is_down){
switch(SystemStead){
case GAME:
break;
}
}
if(is_left){
switch(SystemStead){
case GAME:
break;
}
}
if(is_right){
switch(SystemStead){
case GAME:
break;
}
}
if(is_fire){
switch(SystemStead){
case GAME:
break;
}
}
}
private void upkey() {
switch(SystemStead){
case MENU:
break;
case GAME:
break;
case END:
break;
case OVER:
break;
}
}
private void downkey() {
switch(SystemStead){
case MENU:
break;
case GAME:
break;
case END:
break;
case OVER:
break;
}
}
private void leftkey() {
switch(SystemStead){
case MENU:
break;
case GAME:
break;
case END:
break;
case OVER:
break;
}
}
private void rightkey() {
switch(SystemStead){
case MENU:
break;
case GAME:
break;
case END:
break;
case OVER:
break;
}
}
private void firekey() {
switch(SystemStead){
case TITLE:
break;
case MENU:
DataOut(SystemStead);
SystemNext(GAME);
System.gc();
break;
case GAME:
break;
case END:
break;
case OVER:
break;
}
}
/**
* 计算方法
*
*/
public void upData() {
if(loading != null && !loading.is_loading){
loading = null;
}
switch(SystemStead){
case LOGO:
nowTime = System.currentTimeMillis();
if( nowTime - oldTime >LogeTime){
oldTime = nowTime;
if(nowloge < name_logo.length-1){
nowloge++;
img_logo = Loading.getImage(name_logo[nowloge]);
}else{
DataOut(SystemStead);
SystemNext(MENU);
System.gc();
}
}
break;
case TITLE:
break;
case MENU:
break;
case GAME:
nowMap.mapMov(hero.x, hero.y);
hero.reficeMan(nowMap.mapX, nowMap.mapY);
break;
case END:
break;
case OVER:
break;
case LOADING:
if (i_loading[0] > i_canvasH >> 1){
i_loadSpeed = -5;
}
else if (i_loading[0] < (i_canvasH >> 1) - 20){
i_loadSpeed = 5;
}
for (int i = i_loading.length - 1; i > 0; i--) {
i_loading[i] = i_loading[i-1];
}
i_loading[0] += i_loadSpeed;
break;
}
}
/**
* 绘制方法
*
*/
public void myPaint() {
switch(SystemStead){
case LOGO:
g.setColor(-1);
g.fillRect(0,0,i_canvasW,i_canvasH);
g.setColor(0);
g.drawImage(img_logo,i_canvasW>>1,i_canvasH>>1,3);
break;
case TITLE:
break;
case MENU:
g.setColor(-1);
g.fillRect(0,0,i_canvasW,i_canvasH);
g.setColor(0);
g.drawString("菜单", 50, 50, 20);
break;
case GAME:
g.setColor(0);
g.fillRect(0,0,i_canvasW,i_canvasH);
nowMap.showMap(g);
hero.showMan(g);
break;
case END:
break;
case OVER:
break;
case LOADING:
g.setColor(-1);
g.fillRect(0,0,i_canvasW,i_canvasH);
g.setColor(0);
for(int i = 0 ; i < loding.length ; i ++){
g.drawString(loding[i], i*20+40, i_loading[i], 20);
}
break;
}
}
public void run() {
while (is_gameRun) {
systemTime = System.currentTimeMillis();
keyLian2();
upData();
myPaint();// 绘制缓冲区
repaint();// 绘制到屏幕
long tempTime = System.currentTimeMillis()- systemTime;
try {
if(tempTime >= 40){
Thread.sleep(1);
}else{
Thread.sleep(40-tempTime);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
protected void keyPressed(int key) {
switch (getGameAction(key)) {
case UP:
is_up = true;
upkey();
break;
case DOWN:
is_down = true;
downkey();
break;
case LEFT:
is_left = true;
leftkey();
break;
case RIGHT:
is_right = true;
rightkey();
break;
case FIRE:
is_fire = true;
firekey();
break;
}
}
protected void keyReleased(int key) {
switch (getGameAction(key)) {
case UP:
is_up = false;
break;
case DOWN:
is_down = false;
break;
case LEFT:
is_left = false;
break;
case RIGHT:
is_right = false;
break;
case FIRE:
is_fire = false;
break;
}
}
protected void paint(Graphics arg0) {
arg0.drawImage(huan3Chong1, 0, 0, 20);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -