基于Nokia手机的移动游戏开发步步通(三)
2005-03-04 21:03
429 查看
二、实现游戏的步骤
下图显示的是一个游戏MIDlet在成功安装和运行之后用户界面状态的典型的变化流程。我们想通过一个游戏者的视角来阐述开发移动游戏的过程。
图3 用户界面状态图表
1 开始游戏
在用户启动MIDlet之后,将显示游戏特定的闪动屏幕。闪动屏幕是FullCanvas的一个实例。它可用于显示一个公司的标志或者用动画形式介绍游戏。除了End键以外的所有键盘事件(MIDlet可用的)都可以跳过闪动屏幕并显示主菜单。还应该设置一个时间限定,能够在一定的时间过后自动跳出闪动屏幕进入游戏屏幕。
GameMIDlet类是游戏的基本类;它处理MIDlet的生命周期并且处理游戏显示。下面的代码是闪动屏幕和游戏MIDlet类的构架。
2 主菜单(MainMenu)屏幕
主菜单是包含游戏特定选项的固有目录("Continue"、"New game"、"Options"、"High scores"、"Instructions"、"About"和"Exit game")。"Continue"只有在游戏被暂停的时候才能被显示。当"Continue"显示的时候,它必须是目录列表的第一个元素。主菜单的标题必须是游戏的名称。下面的代码是主菜单的框架。
作者:wayne编译 转贴自:yesky.com
作者Blog:http://blog.csdn.net/mobilechannel/
下图显示的是一个游戏MIDlet在成功安装和运行之后用户界面状态的典型的变化流程。我们想通过一个游戏者的视角来阐述开发移动游戏的过程。
图3 用户界面状态图表
1 开始游戏
在用户启动MIDlet之后,将显示游戏特定的闪动屏幕。闪动屏幕是FullCanvas的一个实例。它可用于显示一个公司的标志或者用动画形式介绍游戏。除了End键以外的所有键盘事件(MIDlet可用的)都可以跳过闪动屏幕并显示主菜单。还应该设置一个时间限定,能够在一定的时间过后自动跳出闪动屏幕进入游戏屏幕。
GameMIDlet类是游戏的基本类;它处理MIDlet的生命周期并且处理游戏显示。下面的代码是闪动屏幕和游戏MIDlet类的构架。
//Skeleton for the base class of game import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class GameMIDlet extends MIDlet { private Display display = null; //Splash screen that starts the application private SplashFullCanvas splash; public GameMIDlet() { splash = new SplashFullCanvas(this); } protected void startApp() throws MIDletStateChangeException { if (display == null) { display = Display.getDisplay(this); } //splash screen to the display setDisplayable(splash); } protected void pauseApp() { } protected void destroyApp(boolean p0) throws MIDletStateChangeException { } public void setDisplayable(Displayable dl) { display.setCurrent(dl); } } //Skeleton for the splash screen in Nokia Java Game import javax.microedition.lcdui.*; import java.util.Timer; import java.util.TimerTask; import com.nokia.mid.ui.*; public class SplashFullCanvas extends FullCanvas { private GameMIDlet parent = null; private MainMenu menu = null; private Timer timer = null; public SplashFullCanvas(GameMIDlet parent) { this.parent = parent; menu = new MainMenu( Resources.getString(Resources.ID_GAME_NAME), List.IMPLICIT, parent); startTimer(); } protected void paint(Graphics g) { //Do the splash screen here } protected void keyPressed(int keyCode) { timer.cancel(); timer = null; //All key events received set the main menu to the screen parent.setDisplayable(menu); } //Timer for the splash screen. Main menu is set to the display //after 5 seconds. private void startTimer() { TimerTask task =new TimerTask() { public void run() { parent.setDisplayable(menu); } }; timer = new Timer(); timer.schedule(task, 5000); } } |
主菜单是包含游戏特定选项的固有目录("Continue"、"New game"、"Options"、"High scores"、"Instructions"、"About"和"Exit game")。"Continue"只有在游戏被暂停的时候才能被显示。当"Continue"显示的时候,它必须是目录列表的第一个元素。主菜单的标题必须是游戏的名称。下面的代码是主菜单的框架。
//Skeleton for the main menu import javax.microedition.lcdui.*; public class MainMenu extends List implements CommandListener { private GameMIDlet parent = null; private GameFullCanvas game = null; public MainMenu(String p0, int p1, String[] p2, Image[] p3, GameMIDlet parent) { super(p0, p1, p2, p3); init(parent); } public MainMenu(String p0, int p1, GameMIDlet parent) { super(p0, p1); init(parent); } public void init(GameMIDlet parent) { this.parent = parent; this.setCommandListener(this); //if game paused then "Continue" should be available in //selection list if (game != null && game.isPaused()) { if(!(this.getString(0).equals( new String(Resources.getString( Resources.ID_GAME_CONTINUE))))) { this.insert(0, Resources.getString(Resources.ID_GAME_CONTINUE), null); } this.setSelectedIndex(0,true); } else { //These must be with or without icons this.append(Resources.getString(Resources.ID_GAME_NEW), null); this.append(Resources.getString(Resources.ID_GAME_OPTIONS),null); this.append(Resources.getString( Resources.ID_GAME_HIGHSCORES), null); this.append(Resources.getString( Resources.ID_GAME_INSTRUCTIONS), null); this.append(Resources.getString(Resources.ID_GAME_ABOUT), null); this.append(Resources.getString(Resources.ID_GAME_EXIT), null); } } public void commandAction(Command p0, Displayable p1) { List lis = (List) p1; String selected = lis.getString(lis.getSelectedIndex()); if (selected.equals(Resources.getString(Resources.ID_GAME_NEW))) { game = new GameFullCanvas(parent, this); parent.setDisplayable(game); } else if (selected.equals( Resources.getString(Resources.ID_GAME_OPTIONS))) { parent.setDisplayable( new OptionList(Resources.getString(Resources.ID_GAME_OPTIONS), List.IMPLICIT, parent, this)); } else if (selected.equals( Resources.getString(Resources.ID_GAME_HIGHSCORES))) { parent.setDisplayable(new HighScore(parent, this)); } else if (selected.equals( Resources.getString(Resources.ID_GAME_INSTRUCTIONS))) { parent.setDisplayable( new Instructions( Resources.getString(Resources.ID_GAME_INSTRUCTIONS),parent,this)); } else if (selected.equals( Resources.getString(Resources.ID_GAME_ABOUT))) { parent.setDisplayable( new About( Resources.getString(Resources.ID_GAME_ABOUT), parent, this)); } else if (selected.equals( Resources.getString(Resources.ID_GAME_EXIT))) { parent.notifyDestroyed(); } else if (selected.equals( Resources.getString(Resources.ID_GAME_CONTINUE))) { if (game != null) { game.gameContinue(); parent.setDisplayable(game); } } } } |
作者Blog:http://blog.csdn.net/mobilechannel/
相关文章推荐
- 基于Nokia手机的移动游戏开发步步通(五)
- 基于Nokia手机的移动游戏开发步步通
- 基于Nokia手机的移动游戏开发步步通(二)
- 基于Nokia手机的移动游戏开发步步通(一)
- 基于Nokia手机的移动游戏开发步步通(一)
- 基于Nokia手机的移动游戏开发步步通(三)
- 基于Nokia手机的移动游戏开发步步通(一)
- 基于Nokia手机的移动游戏开发步步通
- 基于Nokia手机的移动游戏开发步步通(五)
- 基于Nokia手机的移动游戏开发步步通
- 基于Nokia手机的移动游戏开发步步通(四)
- 基于Nokia手机的移动游戏开发步步通(四)
- 基于Nokia手机的移动游戏开发步步通(二)
- 【ZT】基于Nokia手机的移动游戏开发步步通
- Android基于box2d开发弹弓类游戏[二]-------------游戏界面的搭建&移动游戏场景
- 基于NFC智能手机(Android)的开发领域 物联网、金融、交通、游戏
- [Unity3D]手机3D游戏开发:简单的移动和缩放鼠标手势脚本源码
- 为基于J2ME的手机开发移动3D游戏
- Unity中国技术总监刘钢:如何优化基于Unity开发的3D移动游戏
- 基于Nokia S60的游戏开发之五