📄 zoncanvas.java
字号:
// draw menu items
int menuX = (scrWidth - ZonLayer.getWidth("menuitem")) / 2;
int menuY = scrHeight / 3;
g.setClip(menuX, menuY, 49, SHOWMENU_COUNT * 13);
g.drawImage(menuItemImage, menuX, menuY - menuBase * 13,
Graphics.LEFT | Graphics.TOP);
// draw cursor
g.setClip(menuX - 20, menuY + (menuSel - menuBase) * 13, 16, 16);
g.drawImage(cursorImage, menuX - 20, menuY + (menuSel - menuBase)
* 13, Graphics.LEFT | Graphics.TOP);
showMore = !showMore;
if (menuBase < MENU_COUNT - SHOWMENU_COUNT) {
g.setClip(scrWidth / 2 - 6, menuY + SHOWMENU_COUNT * 13 + 2,
11, 6);
g.drawImage(menuItemImage, scrWidth / 2 - 6
- 0, menuY + SHOWMENU_COUNT * 13 + 2
- 104, Graphics.LEFT | Graphics.TOP);
}
if (menuBase > 0) {
g.setClip(scrWidth / 2 - 6, menuY - 8, 10, 6);
g.drawImage(menuItemImage, scrWidth / 2 - 6
- 22, menuY - 8 - 104, Graphics.LEFT
| Graphics.TOP);
}
// displayMemory(g);
return;
case APPSTATE_TITLE:
if (fontHeight == 0) {
Font font = g.getFont();
fontHeight = font.getHeight();
font = null;
}
g.setColor(0);
g.fillRect(0, 0, scrWidth, scrHeight);
/* menuImage2 = ZonLayer.findImage("menubg2");
g.drawImage(menuImage2, scrWidth / 2,
ZonLayer.getHeight("menubg2") / 2 + 1, Graphics.HCENTER
| Graphics.VCENTER);
*/
if (gameStage == GAMESTAGE_FAILED) {
g.setColor(255 << 16 | 224 << 8 | 0);
g.drawString(TARGET_FLIED, scrWidth / 2, scrHeight / 2,
Graphics.HCENTER | Graphics.TOP);
return;
}
g.setColor(255 << 16 | 224 << 8 | 0);
switch (gameStage) {
case GAMESTAGE_ONE:
g.drawString(STAGESTART_TITLE, scrWidth / 2, scrHeight / 4 + 2
* fontHeight, Graphics.HCENTER | Graphics.TOP);
break;
case GAMESTAGE_TWO:
g.drawString(STAGECONTINUE_TITLE, scrWidth / 2, scrHeight / 4 + 2
* fontHeight, Graphics.HCENTER | Graphics.TOP);
break;
case GAMESTAGE_THREE:
g.drawString(STAGECONTINUE_TITLE, scrWidth / 2, scrHeight / 4 + 2
* fontHeight, Graphics.HCENTER | Graphics.TOP);
break;
}
// displayMemory(g);
return;
case APPSTATE_ABOUT:
drawMenuBG(g);
// draw version
g.setClip(0, 30, scrWidth, 70);
g.setColor(0xFFFFFF);
g.drawString(VERSION, scrWidth / 2 , 30, Graphics.HCENTER
| Graphics.TOP);
g.drawString(COMPANY, scrWidth / 2, 46, Graphics.HCENTER
| Graphics.TOP);
g.drawString(INFO, scrWidth / 2, 62, Graphics.HCENTER
| Graphics.TOP);
g.drawString(INFO_NUMBER, scrWidth / 2, 78, Graphics.HCENTER
| Graphics.TOP);
// draw about info
return;
case APPSTATE_GAME:
if(!canvasUpdate)
return;
/* int drawX, drawY, drawWidth, drawHeight;
drawWidth = ZonTileMap.BUF_TILECOUNTX * mainMap.getTileWidth() - mainMap.bufDrawOffsetX;
drawHeight = scrHeight;
drawX = - mainMap.bufDrawOffsetX;
drawY = mainMap.getOffsetY();
g.setClip(0, 0, drawWidth, drawHeight);
g.drawImage(bufImage, drawX, drawY, Graphics.TOP | Graphics.LEFT);
g.setClip(drawWidth, 0, mainMap.bufDrawOffsetX, drawHeight);
drawX = drawWidth;
g.drawImage(bufImage, drawX, drawY, Graphics.TOP | Graphics.LEFT);
spritePaint(g);
spriteLead.paint(g, false, false);
if (tipFlag != 0)
drawTips(g);*/
gameRender(g);
// displayMemory(g);
return;
case APPSTATE_HISCORE:
drawMenuBG(g);
loadScore();
g.setClip(scrWidth / 2 + 16, 80, 8, 8);
int a = hiScore * 10;
String score = Integer.toString(a);
g.setClip(0, 80, scrWidth, 20);
g.setColor(0xFFFFFF);
g.drawString(score, scrWidth / 2 , 80, Graphics.HCENTER
| Graphics.TOP);
score = null;
// reuse aboutImage
/* aboutImage = ZonLayer.findImage("bloodnumber");
g.drawImage(aboutImage, scrWidth / 2 + 16, 80, Graphics.LEFT
| Graphics.TOP);
// other bits
int a[] = new int[5];
a[0] = hiScore % 10;
a[1] = (hiScore % 100) / 10;
a[2] = (hiScore % 1000) / 100;
a[3] = (hiScore % 10000) / 1000;
a[4] = (hiScore % 100000) / 10000;
for (int i = 0; i < 5; i++) {
g.setClip(scrWidth / 2 + 16 - (i + 1) * 8, 80, 8, 8);
g.drawImage(aboutImage, scrWidth / 2 + 16 - (i + 1) * 8,
80 - a[i] * 8, Graphics.LEFT | Graphics.TOP);
}
a = null;*/
// draw high score
g.setClip(scrWidth / 2 - 25, 60, 49, 13);
g.drawImage(menuItemImage, scrWidth / 2 - 25, 60 - 2 * 13,
Graphics.LEFT | Graphics.TOP);
return;
case APPSTATE_PASS:
g.setColor(0);
g.fillRect(0, 0, scrWidth, scrHeight);
g.setColor(255 << 16 | 224 << 8 | 0);
g.drawString(STAGEPASS_MESSAGE, scrWidth / 2, scrHeight / 2,
Graphics.HCENTER | Graphics.TOP);
// displayMemory(g);
break;
}
}
public boolean initMenu() {
appState = APPSTATE_IDLE;
releaseSplashPics();
splash1Image = null;
splash2Image = null;
splash3Image = null;
if (spriteLead != null) {
if (saveScore()) {
}
}
spriteLead = null;
releaseObject();
releaseMenuPics();
releaseStagePics();
releaseSharePics();
System.gc();
// removeCommand(commandBackGame);
removeCommand(commandBack);
removeCommand(commandSave);
loadMenuPics();
// menuImage1 = ZonLayer.findImage("menubg1");
menuImage2 = ZonLayer.findImage("menubg2");
menuItemImage = ZonLayer.findImage("menuitem");
cursorImage = ZonLayer.findImage("cursor");
if((!soundPlaying()) && soundType == 1 && soundOn)
initSound("/sound/bgsound.ott", SIZE_BGSOUND);
appState = APPSTATE_MENU;
return true;
}
public void drawMenuBG(Graphics g) {
g.setColor(92 << 16 | 210 << 8 | 244);
g.fillRect(0, 0, scrWidth, scrHeight);
g.drawImage(menuImage2, scrWidth / 2,
ZonLayer.getHeight("menubg2") / 2 + 1, Graphics.HCENTER
| Graphics.VCENTER);
}
protected void keyPressed(int keyCode) {
int appAction = getGameAction(keyCode);
canvasUpdate = true;
switch (appState) {
case APPSTATE_IDLE:
return;
case APPSTATE_TITLE:
case APPSTATE_PASS:
return;
case APPSTATE_SPLASH:
//为了安全起见,删除这一部分!
/* canvasUpdate = true;
appState = APPSTATE_MENU;*/
return;
case APPSTATE_GAME:
break;
case APPSTATE_ABOUT:
appState = APPSTATE_MENU;
aboutImage = null;
System.gc();
return;
case APPSTATE_SOUNDSET:
switch (appAction) {
case UP:
case DOWN:
if(subMenuSel == 0)
subMenuSel = 1;
else
subMenuSel = 0;
break;
case FIRE:
if(subMenuSel == 0){
if(soundType++ >= 2)
soundType = 0;
//0声音关 1背景音开 2 效果音开
if(soundType == 0)
soundOn = false;
else
soundOn = true;
if (soundOn && soundType == 1 && (!soundPlaying())) {
initSound("/sound/bgsound.ott", SIZE_BGSOUND);
playSound(true);
} else
releaseSound();
} else {
appState = APPSTATE_MENU;
}
break;
}
return;
case APPSTATE_HISCORE:
appState = APPSTATE_MENU;
aboutImage = null;
System.gc();
return;
case APPSTATE_MENU:
switch (appAction) {
case UP:
menuSel--;
if (menuSel < 0)
menuSel = 0;
else if (menuSel < menuBase)
menuBase--;
break;
case DOWN:
menuSel++;
if (menuSel > MENU_COUNT - 1)
menuSel = MENU_COUNT - 1;
else if (menuSel >= menuBase + SHOWMENU_COUNT)
menuBase++;
break;
case FIRE:
switch (menuSel) {
case 0: // new game
releaseObject();
releaseMenuPics();
releaseStagePics();
releaseSharePics();
System.gc();
loadSharePics();
showTitleCount = 0;
gameStage = GAMESTAGE_ONE;
appState = APPSTATE_TITLE;
break;
case 1: // load game
appState = APPSTATE_IDLE;
releaseObject();
releaseMenuPics();
releaseStagePics();
releaseSharePics();
System.gc();
loadSharePics();
if (!loadGame()) {
Alert loadAlert;
loadAlert = new Alert("信息", LOADERR_MESSAGE, null, null);
loadAlert.setTimeout(Alert.FOREVER);
releaseObject();
releaseStagePics();
releaseSharePics();
System.gc();
loadMenuPics();
initMenu();
appState = APPSTATE_MENU;
ZonJaEg.display.setCurrent(loadAlert, this);
}
break;
case 2: // high score
appState = APPSTATE_HISCORE;
break;
case 3:
appState = APPSTATE_SOUNDSET;
break;
case 4: // help
Alert alertHelp = new Alert("帮助", HELP_MESSAGE, null, null);
alertHelp.setTimeout(Alert.FOREVER);
ZonJaEg.display.setCurrent(alertHelp, this);
break;
case 5: // about
appState = APPSTATE_ABOUT;
break;
case 6:
/* if (soundPlayer != null) {
stopSound();
}*/
ZonJaEg.quitApp();
break;
}
break;
}
canvasUpdate = true;
return;
}
switch (appAction) {
case LEFT:
spriteLead.pressKey(MainSprite.KEY_LEFT);
break;
case RIGHT:
spriteLead.pressKey(MainSprite.KEY_RIGHT);
break;
case UP:
spriteLead.pressKey(MainSprite.KEY_UP);
break;
case FIRE:
spriteLead.pressKey(MainSprite.KEY_FIRE);
break;
}
}
protected void keyReleased(int keyCode) {
int gameAction = getGameAction(keyCode);
if (appState != APPSTATE_GAME)
return;
switch (gameAction) {
case LEFT:
spriteLead.releaseKey(MainSprite.KEY_LEFT);
break;
case RIGHT:
spriteLead.releaseKey(MainSprite.KEY_RIGHT);
break;
case UP:
spriteLead.releaseKey(MainSprite.KEY_UP);
break;
case FIRE:
spriteLead.releaseKey(MainSprite.KEY_FIRE);
break;
}
}
public void commandAction(Command command, Displayable displayable) {
// TODO Auto-generated method stub
if(spriteLead != null)
spriteLead.clearKeyStatus();
switch (command.getCommandType()) {
case Command.EXIT:
break;
case Command.OK:
// back to game
// no effect in help screen
if (command.getLabel() == QUIT_GAME) {
// stop the MIDlet
if(spriteLead != null){
if (saveScore()) {
}
}
/* if(soundPlaying()){
releaseSound();
}*/
ZonJaEg.quitApp();
} else if (command.getLabel() == BACK_MENU) {
// update the high local score
if(appState != APPSTATE_GAME)
return;
//releaseStagePics();
initMenu();
} else if (command.getLabel() == MESSAGE_OK) {
resumeGame();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -