透明 发表于 2015-1-18 11:36:41

JAVA网页编程之J2ME 2D小游戏进门之旅(一)游戏的框架

但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开呼应www.j2medev.com站长mingjava的召唤,我也和人人一同分享一下我的履历,但愿人人指教。同时www.j2medev.com接待列位妙手的原创文章。

头几天看到tony在csdn上公布本人的进修作品“是汉子就保持60s”,以为创意固然复杂可是却很耐玩,是进修手机游戏制造的进门典范,因而一时髦起,clone了一下,图片仍然利用的是tony的图片,地道进修之用。假如人人对这个游戏感乐趣能够与tony接洽或会见他的blog。

从开展趋向上说midp2.0是趋向,最廉价的midp2.0手机如ot735i,已1700元摆布;而西门子一年前的高端机cx65,如今也只要2500摆布;而且2500-3000这个价位的midp2.0手机有多种选择,西门子、se、N机都有。我团体挺喜好cx65,假如未来手机打造商本钱不休下降,信任1500元的midp将不是梦…固然还要看使用是不是丰厚了。

言回正传,我们将利用midp2.0来开辟我们的游戏,代号fly。开辟工具jbulider。等文章全写完了,会供应src下载。

目次:

1、游戏的框架

2、完美周边工具类(图像、GameObject、Font)

3、把持飞机的挪动

4、到场枪弹群,完成碰撞运算

5、完成爆炸效果、并到场道具导弹

6、不敷多多,你以为呢?

7、源码

1、游戏的框架
我们的游戏必要一个通用的游戏框架,也便利今后的开辟,但完成一个引擎是庞大的。作为初学者假如要你思索太多的成绩,生怕会让你偏离主线,这里只给出canvas的代码,不睬解能够参看本站的别的一篇系列文章《利用MIDP2.0开辟游戏》。

利用singlon完成,由于每一个gamecanvas都必要良多的内存空间。别的对我们来讲,只需改写gameInit(),gameMain(),一次性初始化的代码写在机关函数中。

publicclassMyGameCanvasextendsGameCanvas
implementsRunnable,CommandListener{
privatestaticMyGameCanvasinstance;
Graphicsg;
booleanrunning;
Threadt;
Commandstartcmd,exitcmd,restartcmd;
intkeystate;
booleankeyevent;
booleankey_up,key_down,key_left,key_right,key_fire;
privatebooleanallowinput;
publicintscreenwidth;
publicintscreenheight;
booleangameover;
//defineyourvariablehere
//defineyourvariableend


protectedMyGameCanvas(){
super(true);
g=getGraphics();
running=false;
t=null;
addCommand(startcmd=newCommand("start",Command.OK,1));
addCommand(exitcmd=newCommand("exit",Command.EXIT,1));
setCommandListener(this);
screenwidth=getWidth();
screenheight=getHeight();

//putyourinitoncecodehere
//putyourinitoncecodeend
}

synchronizedpublicstaticMyGameCanvasgetInstance(){
if(instance==null){
instance=newMyGameCanvas();
System.out.println("newMyGameCanvas");
}
returninstance;
}

publicvoidrun(){
System.out.println("MyGameCanvasrunstart");
longst=0,et=0,diff=0;
intrate=50;//16-17framepersecond
while(running){
st=System.currentTimeMillis();
gameinput();
gameMain();
et=System.currentTimeMillis();
diff=et-st;
if(diff<rate){
//System.out.println("Sleep"+(rate-diff));
try{
Thread.sleep(rate-diff);
}
catch(InterruptedExceptionex){}
}else{
//System.out.println("rush,andtheframeusingtime:á"+diff);
}
}
System.out.println("MyGameCanvasrunend");
}

publicvoidstart(){
if(!running){
running=true;
t=newThread(this);
t.start();
}
}

privatevoidgameMain(){
g.setColor(0,0,0);//clearscreen
g.fillRect(0,0,getWidth(),getHeight());

background.paint(g);//drawbackground
//g.setColor(255,255,255);
//g.drawString("hello",1,1,g.TOP|g.LEFT);
flushGraphics();
}

privatevoidgameInit(){
gameover=false;
gametime=0;
gametimeoffset=System.currentTimeMillis();
allowinput=true;
key_up=key_down=key_left=key_right=key_fire=false;
}

publicvoidstop(){
if(running){
running=false;
}
}

publicvoidcommandAction(Commandc,Displayabled){
Stringcmdstr=c.getLabel();
if(cmdstr.equals("start")){
gameInit();
start();
removeCommand(startcmd);
addCommand(restartcmd=newCommand("restart",Command.OK,1));
}elseif(cmdstr.equals("restart")){
stop();
while(t.isAlive());
gameInit();
start();
}elseif(cmdstr.equals("exit")){
stop();
Navigate.midlet.destroyApp(false);
Navigate.midlet.notifyDestroyed();
}
}

privatevoidgameinput(){
if(allowinput){
keystate=getKeyStates();
keyevent=false;
if((keystate&UP_PRESSED)!=0){//up
key_up=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("uppress");
//dealyourunstopjobcodeend
}elseif((keystate&UP_PRESSED)==0){//releasekey
if(key_up==true){
key_up=false;
//dealyouronepress-onejobcodehere
//System.out.println("uprelease");
//dealyouronepress-onejobcodeend
}
}

if((keystate&DOWN_PRESSED)!=0){//down
key_down=true;keyevent=true;
//dealyourunstopjobcodehere

//System.out.println("downpress");
//dealyourunstopjobcodeend
}elseif((keystate&DOWN_PRESSED)==0){//releasekey
if(key_down==true){
key_down=false;
//dealyouronepress-onejobcodehere
//System.out.println("downrelease");
//dealyouronepress-onejobcodeend
}
}

if((keystate&LEFT_PRESSED)!=0){//left
key_left=true;keyevent=true;
//dealyourunstopjobcodehere

//System.out.println("leftpress");
//dealyourunstopjobcodeend
}elseif((keystate&LEFT_PRESSED)==0){//releasekey
if(key_left==true){
key_left=false;
//dealyouronepress-onejobcodehere
//System.out.println("leftrelease");
//dealyouronepress-onejobcodeend
}
}

if((keystate&RIGHT_PRESSED)!=0){//right
key_right=true;keyevent=true;
//dealyourunstopjobcodehere

//System.out.println("rightpress");
//dealyourunstopjobcodeend
}elseif((keystate&RIGHT_PRESSED)==0){//releasekey
if(key_right==true){
key_right=false;
//dealyouronepress-onejobcodehere
//System.out.println("rightrelease");
//dealyouronepress-onejobcodeend
}
}

if((keystate&FIRE_PRESSED)!=0){//fire
key_fire=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("firepress");
//dealyourunstopjobcodeend
}elseif((keystate&FIRE_PRESSED)==0){//releasekey
if(key_fire==true){
key_fire=false;
//dealyouronepress-onejobcodehere
//System.out.println("firerelease");
//dealyouronepress-onejobcodeend
}
}
if(!keyevent){
//nokeyeventhere
//System.out.println("NOKEYpress");
//nokeyeventend
}
}
}

publicstaticvoidcleanJob(){
instance=null;
}


}



j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。

莫相离 发表于 2015-1-19 05:25:36

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。

愤怒的大鸟 发表于 2015-1-24 06:47:11

是一种语言,用以产生「小应用程序(Applet(s))

冷月葬花魂 发表于 2015-1-25 08:42:10

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

透明 发表于 2015-2-2 17:16:38

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

山那边是海 发表于 2015-2-4 21:02:26

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

变相怪杰 发表于 2015-2-25 13:26:40

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

小魔女 发表于 2015-3-7 21:08:17

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

第二个灵魂 发表于 2015-3-12 03:36:13

是一种为 Internet发展的计算机语言

精灵巫婆 发表于 2015-3-18 14:38:45

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

admin 发表于 2015-3-25 23:26:45

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

活着的死人 发表于 2015-3-27 03:11:26

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

再见西城 发表于 2015-3-28 03:54:35

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

柔情似水 发表于 2015-4-4 16:18:57

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

爱飞 发表于 2015-4-6 18:10:31

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

因胸联盟 发表于 2015-4-10 04:21:56

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

深爱那片海 发表于 2015-4-15 22:53:03

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

乐观 发表于 2015-4-20 21:34:50

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

不帅 发表于 2015-4-29 04:47:53

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页: [1]
查看完整版本: JAVA网页编程之J2ME 2D小游戏进门之旅(一)游戏的框架