📄 canvas_menu.java
字号:
import java.io.IOException;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
// Download by http://www.codefans.net
public class Canvas_Menu extends GameCanvas
{
//背景图片
private Image imgMenu;
private MIDlet_Main mainMIDlet;
private Graphics g;
//绘画模式
private byte drawMode;
//选择框的Y
private short selRectY;
//选择框变化记数
private byte rectChangeCount;
//对话框的Y
private short dialogBoxY;
//对话框高度
private short dialogBoxH;
//是否显示对话框,是否关闭对话框,是否显示对话框中文字
private boolean isShowDB,isCloseDB,isShowString;
private Thread t;
//线程是否退出
static boolean isThreadCancel;
public Canvas_Menu(MIDlet_Main mid)
{
super(false);
setFullScreenMode(true);
mainMIDlet=mid;
g=getGraphics();
try {
imgMenu=Image.createImage("/imgMenu.png");
} catch (IOException e) {
e.printStackTrace();
}
init();
t=new Thread()
{
public void run()
{
if(!isThreadCancel)
{
long start=System.currentTimeMillis();
render();
long end=System.currentTimeMillis();
short time=(short)(end-start);
try {
if(time<100)
Thread.sleep(100-time);
} catch (InterruptedException e) {
e.printStackTrace();
}
mainMIDlet.dis.callSerially(this);
}
}
};
t.start();
}
//初始化菜单界面
public void init()
{
drawMode=0;
selRectY=67;
dialogBoxY=100;
dialogBoxH=0;
isShowDB=false;
isCloseDB=false;
isShowString=false;
g.drawImage(imgMenu,0,0,0);
g.setFont(Font.getFont(0,0,16));
g.setColor(0,0,255);
g.drawRoundRect(93,67,77,27,15,15);
g.setColor(0,255,255);
g.drawRoundRect(94,68,75,25,15,15);
System.gc();
}
//处理显示对话框
public void showDialogBox()
{
if(isShowDB)
{
dialogBoxY-=10;
dialogBoxH+=20;
//当对话框Y变化到10,停止变化,显示文字
if(dialogBoxY==10)
{
isShowDB=false;
isShowString=true;
}
}
if(isCloseDB)
{
dialogBoxY+=10;
dialogBoxH-=20;
//当对话框Y变化到100,停止变化,进入菜单选择模式
if(dialogBoxY==100)
{
isCloseDB=false;
drawMode=0;
}
}
//画对话框
g.setColor(0,0,255);
g.drawRoundRect(11,dialogBoxY,150,dialogBoxH,20,20);
g.setColor(0,255,255);
g.drawRoundRect(12,dialogBoxY+1,148,dialogBoxH-2,20,20);
g.setColor(50,125,255);
g.fillRoundRect(13,dialogBoxY+2,146,dialogBoxH-4,20,20);
if(isShowString)
{
g.setColor(130,245,255);
switch(drawMode)
{
case 3:
{
g.drawString("帮 助",70,20,0);
g.drawString("4键或左键:向左",20,40,0);
g.drawString("6键或右键:向右",20,60,0);
g.drawString("2键或上键:炮口正转",20,80,0);
g.drawString("8键或下键:炮口反转",20,100,0);
g.drawString("5键或选择键:开火",20,118,0);
g.drawString("1键:切换观察模式",20,140,0);
g.drawString("3键:切换道具模式",20,160,0);
break;
}
case 4:
{
g.drawString("关 于",70,20,0);
g.drawString("项目指导:马金明",25,40,0);
g.drawString("开发人员:刘飞 ",25,60,0);
g.drawString("梅横翔 ",85,80,0);
g.drawString("卢组海",85,100,0);
g.drawString("章毅",85,120,0);
g.drawString("版权:martin工作室",25,140,0);
g.drawString(" 杭州润力科技",25,160,0);
break;
}
}
}
}
//处理选择框
public void showSelRect()
{
if(rectChangeCount%2==0)
{
g.setColor(0,0,255);
g.drawRoundRect(93,selRectY,77,27,15,15);
g.setColor(0,255,255);
g.drawRoundRect(94,selRectY+1,75,25,15,15);
}
}
//处理渲染
public void render()
{
rectChangeCount++;
g.setColor(255,255,255);
g.fillRect(0,0,Class_Camera.width,Class_Camera.height);
g.drawImage(imgMenu,0,0,0);
switch(drawMode)
{
//出现选择框
case 0:showSelRect();break;
//进入游戏界面
case 1:
Canvas_Main.isThreadCancel=false;
mainMIDlet.dis.setCurrent(new Canvas_Main(mainMIDlet));
isThreadCancel=true;
System.gc();
break;
//出现对话框
case 2:
Canvas_StageSelect.isThreadCancel=false;
Canvas_Main.isThreadCancel=true;
mainMIDlet.dis.setCurrent(new Canvas_Main(mainMIDlet));
mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
isThreadCancel=true;
System.gc();
break;
case 3:
case 4:showDialogBox();break;
//退出
case 5:mainMIDlet.exit();break;
}
flushGraphics();
}
protected void keyPressed(int keyCode)
{
switch(keyCode)
{
case -1:
case 50:
{
//当对话框没变化时才能控制选择框的向上移动
if(!isShowDB&&!isCloseDB)
{
if(selRectY==67)
selRectY=171;
else
selRectY-=26;
}
break;
}
case -2:
case 56:
{
//当对话框没变化时才能控制选择框的向下移动
if(!isShowDB&&!isCloseDB)
{
if(selRectY==171)
selRectY=67;
else
selRectY+=26;
}
break;
}
case -5:
case -6:
case 53:
{
//当对话框完全关闭才能再次打开对话框
if(!isCloseDB&&dialogBoxY==100)
isShowDB=true;
//设置选择框响应模式
switch(selRectY)
{
case 67:drawMode=1;break;
case 93:drawMode=2;break;
case 119:drawMode=3;break;
case 145:drawMode=4;break;
case 171:drawMode=5;break;
}
break;
}
default:
{
//当对话框完全打开才能再次关闭对话框
if(!isShowDB&&dialogBoxY==10)
{
isCloseDB=true;
isShowString=false;
}
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -