|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。把持其实是等不及了吧?加把劲,让我们到场游戏的配角飞机吧。
你能够将这个游戏定位在举措游戏,一个举措游戏必要不休的从用户端取得输出,基础上不中断,以是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就不一样了,保持微软的一向风格,源代码不公开 |
|