📄 menucanvas.java
字号:
import javax.microedition.lcdui.*;
public class MenuCanvas extends Canvas implements Runnable {
final int MENU = 1; //菜单
final int NEWGAME = 2; //新游戏
final int CONTINUE = 3; //继续
final int HIGHSCORE = 4; //高分榜
final int OPTION = 5; //设置程序
final int HOWTOPLAY = 6; //如何游戏
final int ABOUT = 7; //关于
final int EXIT = 8; //退出
public Image imgScore; //高分榜图片
public Image imgLogo; //LOGO图片
public Image imgBgMap; //背景图片
public Image imgDuo; //菜单标识图片
public Image imgLevelBg; //关卡背景图片
public Image imgNewgame; //新游戏菜单图片
public Image imgContinue; //继续菜单图片
public Image imgHighscore; //高分榜菜单图片
public Image imgOption; //设置菜单图片
public Image imgHowtoplay; //帮助菜单图片
public Image imgAbout; //关于菜单图片
public Image imgExit; //退出菜单图片
public Image imgNewgame0; //新游戏菜单选择图片
public Image imgContinue0; //继续菜单选择图片
public Image imgHighscore0; //高分榜菜单选择图片
public Image imgOption0; //设置菜单选择图片
public Image imgHowtoplay0; //帮助菜单选择图片
public Image imgAbout0; //关于菜单选择图片
public Image imgExit0; //退出菜单选择图片
boolean firstDisp; //第一次运行标志
boolean fd; //是否运行了NEWGAME
int PT = MENU; //当前菜单选择
int menuY = 59; //初始菜单位置
public int data[]; // 存放图片像素信息
public int alpha; // 透明度的值
Thread thread; //线程
Display display; //主程序传的DISPLAY对象
GoldSea myG; //主程序传的myGame对象
TileCanvas bgmap; //游戏画面
Rcav rcav; //高分榜画面
OptionCanvas opcav; //声音选项画面
HelpCanvas helpcav; //帮助画面
AboutCanvas aboutcav; //关于画面
Graphics bg; //后台缓存画图笔
Image buf; //后台缓存画图板
public MenuCanvas(GoldSea myG, Display display) {
super();
this.setFullScreenMode(true); //设置画布全屏显示
firstDisp = true; //TODO
fd = true;
this.myG = myG;
this.display = display;
rcav = new Rcav(this, display);
opcav = new OptionCanvas(this, display);
helpcav = new HelpCanvas(this, display);
aboutcav = new AboutCanvas(this, display);
thread = new Thread(this); //线程实例化
thread.start(); //打开线程
buf = Image.createImage(180, 196);
bg = buf.getGraphics(); //将缓冲对象的Graphics附给bg
// 导入图片
try {
imgLogo = Image.createImage("/picres/logo.png");
imgBgMap = Image.createImage("/picres/bg_map_blank.png");
imgScore = Image.createImage("/picres/score_title.png");
imgDuo = Image.createImage("/picres/duo.png");
imgLevelBg = Image.createImage("/picres/level_bg.png");
imgNewgame = Image.createImage("/picres/newgame_normal.png");
imgContinue = Image.createImage("/picres/continue_normal.png");
imgHighscore = Image.createImage("/picres/highscore_normal.png");
imgOption = Image.createImage("/picres/option_normal.png");
imgHowtoplay = Image.createImage("/picres/howtoplay_normal.png");
imgAbout = Image.createImage("/picres/about_normal.png");
imgExit = Image.createImage("/picres/exit_normal.png");
imgNewgame0 = Image.createImage("/picres/newgame.png");
imgContinue0 = Image.createImage("/picres/continue.png");
imgHighscore0 = Image.createImage("/picres/highscore.png");
imgOption0 = Image.createImage("/picres/option.png");
imgHowtoplay0 = Image.createImage("/picres/howtoplay.png");
imgAbout0 = Image.createImage("/picres/about.png");
imgExit0 = Image.createImage("/picres/exit.png");
data = new int[imgLogo.getWidth() * imgLogo.getHeight()];
imgLogo.getRGB(data, 0, imgLogo.getWidth(), 0, 0, imgLogo
.getWidth(), imgLogo.getHeight());
} catch (java.io.IOException e) {
}
}
public void paint(Graphics g) {
if (firstDisp) {
// 对图片的透明度进行处理
for (int i = 0; i < data.length; i++) {
// 将取得的原有图片的颜色值与我们提供的透明度的值相组合
data[i] = (data[i] & 0x00FFFFFF) | alpha;
}
// 组合完后,在用我们组合好后的颜色来画图片, 最后面的参数表示是否处理透明度的值
// 清屏
bg.setColor(0x000000);
bg.fillRect(0, 0, getWidth(), getHeight());
// 显示透明化的图片
bg.drawRGB(data, 0, imgLogo.getWidth(), 0, 45, imgLogo.getWidth(),
imgLogo.getHeight(), true);
} else if (PT == MENU) {
paintMenu(bg);
} else if (PT == NEWGAME) {
paintNgame(bg);
} else if (PT == CONTINUE) {
paintContinue(bg);
} else if (PT == HIGHSCORE) {
paintHighScore(bg);
} else if (PT == OPTION) {
paintOption(bg);
} else if (PT == HOWTOPLAY) {
paintHelp(bg);
} else if (PT == ABOUT) {
paintAbout(bg);
}
g.drawImage(buf, 0, 0, Graphics.LEFT | Graphics.TOP); //显示后台图片
}
public void paintMenu(Graphics g) {
// 主目录显示
g.drawImage(imgBgMap, 0, 0, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgDuo, 25, menuY - 3, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgNewgame0, 43, 59, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgContinue0, 43, 74, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgHighscore0, 43, 89, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgOption0, 43, 104, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgHowtoplay0, 43, 119, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgAbout0, 43, 134, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgExit0, 43, 149, Graphics.TOP | Graphics.LEFT);
switch (menuY) {
case 59:
g.drawImage(imgNewgame, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
case 74:
g.drawImage(imgContinue, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
case 89:
g.drawImage(imgHighscore, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
case 104:
g.drawImage(imgOption, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
case 119:
g.drawImage(imgHowtoplay, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
case 134:
g.drawImage(imgAbout, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
case 149:
g.drawImage(imgExit, 43, menuY, Graphics.TOP | Graphics.LEFT);
break;
}
}
//新游戏
public void paintNgame(Graphics g) {
if (fd) {
g.drawImage(imgBgMap, 0, 0, Graphics.TOP | Graphics.LEFT);
g.drawImage(imgLevelBg, 35, 60, Graphics.TOP | Graphics.LEFT);
g.setColor(0xf8f244);
g.drawString("THE 1 LEVEL", 65, 85, Graphics.TOP | Graphics.LEFT);
g.drawString("Loading...", 75, 110, Graphics.TOP | Graphics.LEFT);
fd = false;
repaint();
} else {
bgmap = new TileCanvas(this, display);
if (opcav.getSoundSwitch())
bgmap.Sound();
display.setCurrent(bgmap);
}
}
//继续
public void paintContinue(Graphics g) {
if (fd == false) {
if (bgmap.isRun == true)
display.setCurrent(bgmap);
} else {
PT = MENU;
menuY = 59;
repaint();
}
}
//排行榜
public void paintHighScore(Graphics g) {
SoundEffects.getInstance().startHighScoreSound();
display.setCurrent(rcav);
SoundEffects.getInstance().stopHighScoreSound();
}
//选项
public void paintOption(Graphics g) {
display.setCurrent(opcav);
}
//帮助
public void paintHelp(Graphics g) {
display.setCurrent(helpcav);
}
//关于
public void paintAbout(Graphics g) {
display.setCurrent(aboutcav);
}
// 操作
protected void keyPressed(int key) {
int k = getGameAction(key);
if (k == Canvas.UP) {
menuY -= 15;
if (menuY < 59)
menuY = 149;
repaint();
} else if (k == Canvas.DOWN) {
menuY += 15;
if (menuY > 149)
menuY = 59;
repaint();
} else if (k == 8 || key == -7) {
ProcessCommand();
repaint();
} else if (key == -6) {
if (!opcav.getSoundSwitch())
SoundEffects.getInstance().stopBackgroundSound();
// BackCommand();
repaint();
}
}
public void run() {
int j;
while (true) {
if (firstDisp) {
try {
Thread.sleep(250);
} catch (Exception e) {
e.printStackTrace();
}
for (j = 8; j < 256; j += 25) {
// 动态处理透明度的值
alpha = j << 24;
repaint();
try {
Thread.sleep(250);
} catch (Exception e) {
e.printStackTrace();
}
}
alpha = 255 << 24;
repaint();
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
for (j = 255; j > 0; j -= 40) {
alpha = j << 24;
repaint();
try {
Thread.sleep(250);
} catch (Exception e) {
e.printStackTrace();
}
}
alpha = 0 << 24;
repaint();
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
firstDisp = false; //关闭第一次显示开关
repaint();
}
}
}
public void ProcessCommand() {
if (menuY == 59) {
PT = NEWGAME;
} else if (menuY == 74) {
PT = CONTINUE;
} else if (menuY == 89) {
PT = HIGHSCORE;
} else if (menuY == 104) {
PT = OPTION;
} else if (menuY == 119) {
PT = HOWTOPLAY;
} else if (menuY == 134) {
PT = ABOUT;
} else if (menuY == 149) {
try {
myG.notifyDestroyed();
} catch (Exception E) {
}
}
}
public void BackCommand() {
PT = MENU;
menuY = 59;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -