仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 678|回复: 9
打印 上一主题 下一主题

[学习教程] 来看J2ME手机游戏引擎程序架构

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。
在游戏开辟和任何软件的计划都必要创建一个不乱的引擎布局体,来作为软件计划的基础架构,是软件系统布局的中心支持框架,统统功效的完成和扩大都在这个基本架构之下去完成。一个游戏的计划触及到游戏把持、脚色、游戏场景、道具、游戏声效和游戏历程事务监听机制等元素,因而创建优秀的游戏引擎能对以上各元素举行无效的把持。本文先容在J2ME游戏计划中游戏引擎的基础程序架构。
游戏引擎能够创建分歧的布局体来完成,可是任何游戏的计划都离不守旧过计划一个主轮回loop来反复把持全部游戏历程,固然全部游戏的中心布局(背景变幻把持、精灵坐标变更、举措帧画面变更等)都包括在该轮回中。在J2ME游戏计划中,程序架构一样平常必要创建两个中心类,便是MIDlet跟Displayable两类。
1、个中MIDlet是J2ME的主类,任何程序主类都必要承继MIDlet来把持全部游戏的性命周期,必要掩盖MIDlet中的三个周期办法startApp、pauseApp跟destoryApp,分离为实行入手下手、停息、停止等举措的操纵体。
publicclassGameTestextendsMIDletimplementsCommandListener{
/**
 *游戏引擎先容
 */
privateCommandexitCommand;
privateGameCanvasTestgameCanvas;
publicGameTest(){
 exitCommand=newCommand("exit?,command.exit,1);
 GameCanvasTestgameCanvas=newGameCanvasTest(this);
 sfcan.addCommand(exitCommand);
 sfcan.setCommandListener(this);
 Display.getDisplay(this).setCurrent(gameCanvas);
 //TODO主动天生机关函数存根
}
protectedvoidstartApp()throwsMIDletStateChangeException{
 //TODO主动天生办法存根
 //gameCanvas.thread.start();
}
protectedvoidpauseApp(){
 //TODO主动天生办法存根
 try{
 gameCanvas.thread.wait();
 }catch(Exceptione){}
}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{
 //TODO主动天生办法存根
 gameCanvas=null;
}
publicvoidcommandAction(Commandc,Displayabled){
 if(c==exitCommand){ 
 notifyDestroyed();
 }
}
//完成游戏历程界面跟分歧操纵变更的调剂
publicvoidchangeTale(inttaleIndex)
{
 详细代码完成.......
 Display.getDisplay(this).setCurrent(....);
}
}
GameTest类承继了MIDlet类,完成游戏性命周期的把持,并且也仅仅对游戏性命周期的把持跟游戏过程当中的UI调剂事情,而把详细的游戏中心模块放到GameCanvasTest类中往完成。
2、Displayable是游戏的显现效果中心,在J2ME游戏计划中利用GameCanvas类完成游戏画布事情,计划类承继GameCanvas来完成游戏中心模块,一般将游戏主轮回安排于该类中完成全部游戏的把持,因而在承继GameCanvas的同时还必要完成轮回Runnable接口。
 publicclassGameCanvasTestextendsGameCanvasimplementsRunnable{
  //声明变量.......
 publicGameCanvasTest(MIDletmidlet)
 {
   super(true);
   //初始化变量.......
 }
  publicvoidrun(){
   keyPressed(getKeyStates());
   spritePixel();
   drawCanvas();
   //其他办法和处置.......
 }
  protectedvoidkeyPressed(intkeyCode){
  //按键处置.......
}
 publicvoidspritePixel(){
 //精灵和舆图坐标幻化把持......
}
 publicvoiddrawCanvas(){
 //依据坐标变更重绘画面处置........
}
}
 GameCanvasTest类中完成了游戏骨干部分,包含键盘按键事务处置、坐标变更、画面重绘,固然游戏精灵跟舆图背景也在该类中界说,并利用LayerManager举行办理。
以上是一样平常的游戏架构,固然,在较庞大的游戏计划内里,利用以上架构将会较贫苦,使得程序不明晰。因而在程序计划中能够接纳MVC形式来构建游戏引擎,将各部分笼统出来分歧的层(分离为UI显现、线程把持和输出监控等调剂、精灵等游戏详细模子)往完成各自的功效,从而进步软件的可读性跟可保护性。

为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
admin 该用户已被删除
沙发
发表于 2015-1-20 19:09:01 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-26 18:58:08 来自手机 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
变相怪杰 该用户已被删除
地板
发表于 2015-2-4 18:38:04 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
因胸联盟 该用户已被删除
5#
发表于 2015-2-6 10:40:43 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-11 10:24:47 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
7#
发表于 2015-3-2 10:28:08 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
不帅 该用户已被删除
8#
发表于 2015-3-11 21:35:36 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
若相依 该用户已被删除
9#
发表于 2015-3-19 14:28:14 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
再现理想 该用户已被删除
10#
发表于 2015-3-28 11:16:51 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 21:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表