JAVA网页设计J2ME 2D小游戏进门之旅(三) 把持飞机的...
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。把持其实是等不及了吧?加把劲,让我们到场游戏的配角飞机吧。你能够将这个游戏定位在举措游戏,一个举措游戏必要不休的从用户端取得输出,基础上不中断,以是plane必要不休的改动地位。那末这个基于桢的游戏应当定在几桢符合呢?这必要在手机中测试,在摹拟器上,假如定在15-18桢摆布,是对照符合的。听csdn的几位xd说有的游戏仅仅定在12桢,以是分歧的游戏是纷歧定的。基础上举措游戏对机子的请求是要高一点。我们的游戏框架是线性的,即输入显现和承受输出是在统一个线程中,15桢以下的游戏处置输出会显得对照苯,高于20桢假如处置器速率较慢,很简单呈现输出卡在缓冲区,处置不外来的情形。现阶段只管让桢数降上去吧,你不克不及和pc上用dx编程时,一致30fps的情形等量齐观。
在这个以把持精灵挪动为次要内容的游戏中,我们不封装任何的游戏事务,我们的程序大概有些稚嫩,不妨,一步一步来吧。
1.飞机
plane是一个尺度的plane。由三桢画面构成,:
在机关函数中,我们到场对飞机的初始化对象语句:
Imageimg=ImageTools.getImage("/pic/MyPlaneFrames.png");
plane=newGameObject(img,24,24);
在gameInit()中初始化形态,地位居中:
plane.reset();
plane.moveto((screenwidth-plane.sprite.getWidth())/2,(screenheight-plane.sprite.getHeight())/2);
在gameMain中到场:
plane.paint(g);
接上去,让飞机在把持下挪动,次要是在gameMain中到场输出处置,假如飞机左移就更新画面到飞机左倾的画面,假如飞机右倾反之,没有输出的时分让飞机处于一般。
if(gameover){
}else{
if(keyevent){
if(key_up){
plane.move(0,-3);
plane.sprite.setFrame(0);
}
if(key_down){
plane.move(0,3);
plane.sprite.setFrame(0);
}
if(key_left){
plane.move(-3,0);
plane.sprite.setFrame(1);
}
if(key_right){
plane.move(3,0);
plane.sprite.setFrame(2);
}
if(key_fire){
}
}
}
else{
plane.sprite.setFrame(0);
}
}
只管很复杂,但这是把持精灵挪动的次要体例。能够设想一下,假如往左飞不是复杂的一桢画面而是播放动画,该怎样完成呢?我们的GameObject功效无限,没有对spriite的动画序列举行加强,从此我们能够加强GameObject,使其撑持多个动画序列,填补spriite的不敷。如今渐渐体味到一个好的游戏引擎是何等主要了吧…
2.背景
让飞机在海面航行吧,我们用一个蓝色的背景图片代表海面,我们必要他展满全部背景。我们利用TiledLayer来绘画背景。
初始化:
img=ImageTools.getImage("/pic/back_water.png");
intbackcolumns=screenwidth/img.getWidth()+1;//盘算横向
intbackrows=screenheight/img.getHeight()+1;
background=newTiledLayer(backcolumns,backrows,img,img.getWidth(),img.getHeight());
intx,y;
for(inti=0;i<backcolumns*backrows;i++){
x=i%backcolumns;
y=i/backcolumns;
System.out.println("x="+x+"y="+y);
background.setCell(x,y,1);
}
接上去在gameMain中到场绘制语句。
background.paint(g);//drawbackground
注重,要包管背景的绘制在飞机的绘画之前。假如利用Layermanager能够很便利的的把持绘制层,可是我们的接上去的枪弹请求多个枪弹对象共用一个sprite的图象,可是Layermanager绘画的时分以Layer为单元,由Layermanager匡助我们挪用各个layer的paint,so一次只撑持将一个sprite画在一个中央,以是我以为Layermanager有些鸡肋。一样平常时分我们仍是本人paint吧。固然,层是一个很主要的观点,使用层,屏幕校准将十分便利,震惊全部屏幕等殊效将很完成。大概你有个好法,可让我不在Layermanager层与sprite形态对象组之间冲突…
可喜可贺呀,我们的飞灵活起来了,哈哈,让我们等候到场枪弹吧,那是本游戏的“精髓”。
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) Java 编程语言的风格十分接近C、C++语言。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 是一种使网页(Web Page)产生生动活泼画面的语言 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页:
[1]