请高手给一份android开发高手进阶游戏开发中,...

【游戏开发】初尝Android游戏开发
&目前在尝试着开发android游戏,以前一直在做java方面的项目,初步接触android,虽说android的核心是java,但还是发现有所不同!学起来感觉还是有点慢!也许是自己的java基础还没打牢!对于android程序还是有其独特的不同于java的部分!一个android程序必须要有activity(活动),activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。一个应用程序通常由多个activities组成,他们通常是松耦合关系。通常,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个"main"activity。每一个activity然后可以启动另一个activity为了完成不同的动作。每一次一个activity启动,前一个activity就停止了,但是系统保留activity在一个栈上(“back
stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back
Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。当一个activity因新的activity启动而停止,它被通知这种状态转变通过activity的生命周期回调函数。有许多回调函数一个activity可能会收到,源于它自己的状态变化-无论系统创建它、停止它、恢复它、摧毁它-并且每个回调提供你完成适合这个状态的指定工作的机会。好了!android的相关知识介绍就此打住!
下面以目前在制作的首款android游戏(首款相对于对我来说的,这个游戏也许很多人知道,也可能觉得它没意思)为例。简单介绍一下android游戏开发。高手请掠过!全部的代码由于篇幅原因,故在此就不完全贴出。
这是我自己设计的一个游戏图标!在正规条件下这个可由美工人员完成,但我不是正规军,没有美工小组,所以只好自己一手包揽!然后运行到安卓手机界面就是下图所示的界面(上起:最后一行,左起:第三个)!
整个游戏的开发由于没有用到线程,网络,数据库等相关的知识,故整个游戏的类不多,并且也相对简单!但该游戏要用到android
UI的相关知识,故对于初学者是一个不错的练习项目!eclipse里面的工程截图如下:
本游戏还可以做的复杂一些,再增加一下它的趣味性!但我是为了练习,所以没有极大的完善其各个方面的功能,读者如有兴趣可以继续完善该项目!运行该游戏可得到如下欢迎界面:
游戏界面是自己设计的,没受过正规的艺术培训,不过也正在努力增加自己的艺术修养,提高设计能力!希望有一天能做出更有艺术感的东西!好了,现在我们看下他底层的代码也就是在GameActivity里设置一个WelcomeView(欢迎界面)。主要代码如下:
WelcomeView fristview=
//对各个WelcomeView的引用
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
showwelcome(); //调用显示欢迎界面的函数
public void showwelcome(){//显示欢迎界面
fristview=new WelcomeView(GameActivity.this);
setContentView(fristview);
-------------------------------------------------------------(以上代码是在GameActivity里面的)
对于WelcomeView里面的主要代码如下:
protected void onDraw(Canvas canvas)
{//绘制View背景图片
pen.setColor(Color.BLACK);//设置画笔颜色
pen.setAntiAlias(true);//开启画笔抗锯齿功能
RectF rectF = new RectF(0, 0, 480,724);
//w和h分别是屏幕的宽和高,也就是你想让图片显示的宽和高
canvas.drawBitmap(background,null, rectF, pen);//绘制图片
super.onDraw(canvas);
public boolean onTouchEvent(MotionEvent me)
{ //添加屏幕触摸响应
if(me.getAction()!=MotionEvent.ACTION_DOWN){
return super.onTouchEvent(me);
。。。。。。。。。。。。。。。。。。。-------(此处省略了事件触发的相关代码)
下面是游戏辅助功能的相关界面,点击music(音乐)可以开启/关闭背景音乐,点击help(帮助)可显示帮助界面,介绍游戏相关操作。点击us(我们)可以看到介绍关于我们的界面。
点击play可以进入到游戏界面中,如下图所示:
在界面中间显示的是一个toast(英文翻译是土司,不知道什么意思!作用类似弹出的提示框,但有些区别!),用于显示提醒用户的相关信息!该toast过一小段时间就会自动消失,即出现下面的游戏界面:
游戏规则就如游戏操作里所描述一样,当玩家出现了在某一格填数时,无可选择的数值(在1-9中找不到一个数,能使横行、竖行、及该格所在的小九宫格内没有重复数字),游戏将会提示以下信息!
点击restart即重新开始游戏,点击return即返回到主菜单界面!若玩家能够按规则填满整个九宫格则会显示下面的成功界面:
点击return返回主界面,点击next则会进入到下一轮的游戏当中!
好了现在我们看下的MyView(游戏界面)的底层主要代码:
protected void onDraw(Canvas canvas) {//绘制游戏背景
//定义画笔
Paint paint=new Paint();
//设置画笔颜色
paint.setColor(getResources().getColor(R.color.backcolor));//绘制背景
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
//设置画笔
Paint darkpen=new Paint();
darkpen.setColor(getResources().getColor(R.color.dark));
Paint lightpen=new Paint();
lightpen.setColor(getResources().getColor(R.color.light));
Paint coverpen=new Paint();
coverpen.setColor(getResources().getColor(R.color.white));
for(int i=0;i&9;i++){
//以下两条线绘制单元格
canvas.drawLine(0,i*this.hieght,getWidth() , i*this.hieght,
lightpen);
canvas.drawLine(0,i*this.hieght+2,getWidth() , i*this.hieght+2,
coverpen);
canvas.drawLine(i*this.width,0,i*this.width , getHeight(),
lightpen);
canvas.drawLine(i*this.width+2,0,i*this.width+2 ,getHeight(),
coverpen);
for(int i=0;i&9;i++){
if(i%3!=0){
canvas.drawLine(0,i*this.hieght,getWidth() , i*this.hieght,
canvas.drawLine(0,i*this.hieght+2,getWidth() , i*this.hieght+2,
coverpen);
canvas.drawLine(i*this.width,0,i*this.width , getHeight(),
canvas.drawLine(i*this.width+2,0,i*this.width+2 ,getHeight(),
coverpen);
//设置文本画笔,及绘制文本
Paint textpen=new Paint();
textpen.setAntiAlias(true);
textpen.setColor(Color.BLACK);
textpen.setStyle(Paint.Style.STROKE);
textpen.setTextSize(this.hieght*0.75f);
textpen.setTextAlign(Paint.Align.CENTER);
FontMetrics mf=textpen.getFontMetrics();
float x=this.width/2;
float y=this.hieght/2-(mf.ascent+mf.descent)/2;
for(int i=0;i&9;i++){
for(int j=0;j&9;j++){
if(game.getnumString(j, i).equals("")){this.cleared=}
canvas.drawText(game.getnumString(j, i),
x+j*this.width,y+i*this.hieght, textpen);
super.onDraw(canvas);
------------------------------------------------------------------(以上代码为绘制整个游戏场景,包括初始显示的数字)
至于Game,MyDialog,以及HelpAndUs在此就不再详细介绍了!简单介绍其功能:Game是实现整个游戏逻辑计算的相关类,MyDialog是实现整个游戏的信息提示相关类,而HelpAndUs是实现游戏辅助功能的相关类!本游戏只使用了一个Activity即GameActivity!
由于是初次尝试制作android游戏,不足的地方还望高手给予指出!对于有异议的地方可以提出,我们一起讨论,希望大家共同进步!(对于最后一张图片,观察仔细的读者会觉察到貌似有问题!呵呵,听我解释那不是游戏问题,而是我改了游戏里面的参数,为了是要测试相关的数据和界面,所以看起来没有按要求完成却显示我赢了!说实话我一次也没有赢过!你若是有兴趣的话可以来试试!)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Android游戏开发实例与技巧
在IT技术如火如荼的今天,移动开发已成为新的技术热点。其中Android开发就是一个热门方向。如果你对Android感兴趣,又对游戏开发感兴趣,推荐学习本专题,汇集了Android游戏开发的实例技巧。
阅读量:56697 收藏量:1
11205/26055/17184/23956/32588/02119/01582/21729/01369/01198/08983/23422/1950/03587/2850/1829/1921/0824/01376/11120/0673/02129/31703/01240/01304/21330/02378/3
温馨提示:添加博文完善专题,帮助他们的同时您可以获得5个无忧币奖励哦~
一周热赞博文如何成为Android高手 - 沙翁 - 博客园
向昨天要经验;
向今天要结果;
向明天要动力
若立志成为Android  &天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。&想成为Android高手?这可不是想象中写几行
一:学会懒惰&  没搞错吧?竟然让程序开发人员学会懒惰?程序开发人员可能是世界上最为忙碌的一类人啦!对,没错,学会懒惰!正因为程序开发人员忙碌,正因为程序开发 人员可能会在客户无限变化的需求之下没日没夜的加班,所以要学会懒惰,这样,你就可以把更多的时间浪费在美好的事物身上!&如何懒惰:&1,Don't Reinvent the Wheel(不要重复发明轮子)。&2,Inventing the Wheel(发明轮子)。&1,Don't Reinvent the Wheel(不要重复发明轮子)。&  &轮子理论&,也即&不要重复发明轮子&,这是西方国家的一句谚语,原话是:Don't Reinvent the Wheel。&不要重复发明轮子 &意思是企业中任何一项工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人。拿到软件领域中就是指有的项目或功能,别人已经做过,我们需要用 的时候,直接拿来用即可,而不要重新制造。  &  Android号称是首个为移动终端打造的真正开放和完整的移动软件。Android发布后不久Google公司就发布了操作系统核心 (Kernel)与部分驱动程序的源代码,到目前为止除了Google Map等Google公司的核心组件没有开放源代码外,Android基本完成了完全的开源,这就极大的促进了Android的普及和移植。受到 Android开放行为和开源精神的影响,在世界各地,有成千上万的程序员喜欢和别人分享自己的聪明才智和自己编写的代码。你可以在Google的Android讨论组或者Google搜索引擎上搜索到很多优秀的程序代码。这样做并不是鼓励大家整天等着让别人为你编写代码,而是你可以&站在伟人的肩 膀上&,充分发扬&拿来主义&,聪明地应用别人的程序代码可以节省你大量的时间。
2,Inventing the Wheel(发明轮子)。  发明轮子?不错,发明轮子!我们不仅要发明轮子,更要成为努力成为世界上发明轮子的主导力量,唯有这样,才能谈的上中华名族软件大业的真正强大。在 Android,要发明轮子,就是我们要主动的是解决一些世界上他人未解决的难题或者创造新的编程框架或者对Android进行深度的改造以适合自己的业务发展需要。Google发布了Android后不久,中国移动便投入了大量的人力和物力,在Android的基础上创建融入自己业务并开发、封装了新的功能的和框架的OMS,这是Android中发明轮子的一个非常重要的例子。可能你会说,这发明轮子也太难了吧,别急,我们慢慢来,开发一个特定领域的框架吧!你可能会一脸无辜的说,开发一个框架是说的那么容易吗?当然不是啦。但是也并非不可能,首先,我们分析一下框架的魅力的源泉,看看 Spring、Struts等Java EE框架,在看看.NET框架,当然也可以看看发展的如火如荼、层出不穷的PHP框架,她们的强大和魅力的源泉都在于:IoC(Inversion of Control)。&Don't call us, we'll call you(别找我,我会来找你的)。
二:精通Android体系架构、MVC、常见的设计模式、控制反转(IoC)&1,请看某个著名的IT公司一则招聘信息的其中一条要求:&熟悉Android系统架构及相关技术,1年以上实际Android平台开发经验;&,里面非常明确的说道要求熟练Android系统架构,这从某种程度上说明了对Android体系架构的理解的重要性。&
Linux Kernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。Libraries和Android Runtime:Libraries:即C/C++函数库部分,大多数都是开放源代码的函数库,例如WebKit,该函数库负责Android网页浏览器 的运行,例如标准的C函数库Libc、OpenSSL、SQLite等,当然也包括支持游戏开发2D SGL和3D OpenGL | ES,在多媒体方面有MediaFramework框架来支持各种影音和图形文件的播放与显示,例如MPEG4、H.264、MP3、AAC、AMR、 JPG和PNG等众多的多媒体文件格式。Android的Runtime负责解释和执行生成的Dalvik格式的字节码。&  Application Framework(应用软件架构),Java应用程序开发人员主要是使用该层封装好的API进行快速开发。&Applications:该层是Java的应用程序层,Android内置的Google Maps、E-mail、即时通信工具、浏览器、MP3播放器等处于该层,Java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置, 可以调用内置的应用程序,也可以替换内置的应用程序。&上面的四个层次,下层为上层服务,上层需要下层的支持,调用下层的服务,这种严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发。&Android应用程序使用框架的API并在框架下运行,这就带来了程序开发的高度一致性,另一方面也告诉我们,要想写出优质高效的程序就必须对整个 Application Framework进行非常深入的理解。精通Application Framework,你就可以真正的理解Android的设计和运行机制,也就更能够驾驭整个应用层的开发。
三:编写可重用、可扩展、可维护、灵活性高的&&&&& Android
五,学会至少一门服务器端开发技术&&&&&&& 可能有朋友会问:学习Android应用程序开发为什么还需要学习学会至少一门服务器端开发技术呢?***如下:一方面Android号称是首个为移动终端打造的真正开放和完整的移动软件。作为一种移动终端,必须与服务器端结合才能发挥巨大的作用。简言之,需要:云端+云的方式。Android是为移动互联网时代量身打造的,移动互联网时代的服务模式是&手机终端+互联网络+应用软件&,移动互联网时代应用技术之一的Android只是用于开发移动终端软件,而服务端技术用于开发互联网络应用,所以未来移动互联网时代软件的主流应用模式将是&手机客户端+互联网络应用服务端&,这种模式要求做移动互联网开发的程序员不但要掌握像Android这样的手机终端软件技术还要掌握开发互联网络应用的服务器端技术。目前,软件企业普遍存在这样的问题,做移动互联网开发Android终端软件的程序员不了解web应用技术,而做web应用的程序员不了解移动终端技术,这样就导致了客户端与服务端在衔接上出现了问题。 目前的现状是:既掌握移动互联网Android终端技术,又掌握web应用技术的程序员比较稀缺,随着中国步入移动互联网时代,企业对这种移动互联网时代 综合性人才的需求很旺盛。如果不了解web应用技术,最终会遇到了技术和发展的瓶颈;另一方面,Google联合OHA推出的真正优势之一也在于和和互联网结合,Google的用意之一也是想开辟新的终端去使用Google的优势服务。&&&&&&& 服务器端开发技术目前主流的有Sun的Java EE、微软的.NET,开源的以PHP和MySQL为代表的LAMP体系,我们该选择哪一种呢?从理论上讲,很多人倾向于选择Java EE,毕竟它们都是使用Java作为开发语言的,但是很多人面对Java EE众多的框架就望而生畏,其实在学习Java EE的时候可以从Struts入手,随着业务的需求逐步深入。当然,选择微软的.NET也行,毕竟该技术体系也占有很大 市场份额。其实,笔者认为,选择LAMP可以是会获得最高的&性价比&的,一方面PHP是现在Web方面的主流语言,大多数新型的网站尤其是创业性质的网站一般都会选用PHP作为服务端开发语言,另一方面,前面也说过,Android是为移动互联而生的,两者达到了完美的契合。
转自:/blog/749838本周热点魔兽迷们请关注,每天共享魔兽的精妙体验,分享玩家攻略!饥饿的库苏莫斯是世界首领级...& & 我的家在农村,父亲是个“老实人”。&&nb...进入九月了,夏末秋初,更适合哪些发型?2016年下半年最新流行发型推荐,14款甜...&&& &华灯初上,J市最大最豪华的夜总...点进来要慎重。。不只因为内容,还因为。。篇幅特别长,小心流量。。。...

参考资料

 

随机推荐