?? 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;
//選擇框變化記數(shù)
private byte rectChangeCount;
//對話框的Y
private short dialogBoxY;
//對話框高度
private short dialogBoxH;
//是否顯示對話框,是否關(guān)閉對話框,是否顯示對話框中文字
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鍵或上鍵:炮口正轉(zhuǎn)",20,80,0);
g.drawString("8鍵或下鍵:炮口反轉(zhuǎn)",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("關(guān) 于",70,20,0);
g.drawString("項目指導(dǎo):馬金明",25,40,0);
g.drawString("開發(fā)人員:劉飛 ",25,60,0);
g.drawString("梅橫翔 ",85,80,0);
g.drawString("盧組海",85,100,0);
g.drawString("章毅",85,120,0);
g.drawString("版權(quán):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)
{
//出現(xiàn)選擇框
case 0:showSelRect();break;
//進入游戲界面
case 1:
Canvas_Main.isThreadCancel=false;
mainMIDlet.dis.setCurrent(new Canvas_Main(mainMIDlet));
isThreadCancel=true;
System.gc();
break;
//出現(xiàn)對話框
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:
{
//當對話框完全關(guān)閉才能再次打開對話框
if(!isCloseDB&&dialogBoxY==100)
isShowDB=true;
//設(shè)置選擇框響應(yīng)模式
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:
{
//當對話框完全打開才能再次關(guān)閉對話框
if(!isShowDB&&dialogBoxY==10)
{
isCloseDB=true;
isShowString=false;
}
break;
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -