Android小兔子跳铃铛游戏开发过程和心得

移动开发 Android 游戏开发
本文中的Android游戏开发实例是一位比较有上进心的学生分享的,实现的是小兔子跳铃铛的游戏。作者在开发过程中有经验也有疑惑,大家可以据此发表自己的评论。

本文中的Android游戏开发实例是一位比较有上进心的学生分享的,实现的是小兔子跳铃铛的游戏。作者在开发过程中有经验也有疑惑,大家可以据此发表自己的评论。

一、游戏运行效果

Android小兔子跳铃铛游戏开发过程和心得 

Android小兔子跳铃铛游戏开发过程和心得

Android小兔子跳铃铛游戏开发过程和心得

[[114104]]

Android小兔子跳铃铛游戏开发过程和心得

Android小兔子跳铃铛游戏开发过程和心得

二、运行环境说明

我是用Eclipse开发的,在模拟器上运行。模拟器的配置如下。大家注意下Skin选项中Built-in 必须是“WQVGA400”(这是我游戏的一个缺陷)。

Android小兔子跳铃铛游戏开发过程和心得

三、体系结构说明

在看这部分之前,我建议大家先到网上玩玩那个小游戏(http://www.vifo.com.cn/games/no2/tiaolindang/tiaolindang.swf),相信会对你对我下面类容的理解有所帮助。

下面是Eclipse截图,我简要说明下各个类的作用:

1、RabitActivity:游戏就从这个Activity启动,它的主要作用就是负责展示游戏简介(IntroduceView),如何游戏(HelpView),是否开启音效AudioView)的这三个不同的屏幕。

2、GameActivity:当用户选择完是否开启音效后,就切换到一个新的activity,即GameActivity。

3、Rabit,Bell, Bird,对游戏中兔子,铃铛,鸟的定义。包括状态(state),图片(bitmaps), 速度(speed)都在里面定义。我感觉,state是个很重要的属性,他决定着这个对象到底处于何种状态,从而根据这些状态绘制不同的图片。

4、GameSurfaceView:游戏的显示类,同时是个大容器,将所有的游戏中出现的对象都包含进来,里面的update_all_components()是游戏的核心。

5、BellCreator:负责铃铛的对象的创建。当一个铃铛从屏幕中消失是,该对象并没有被销毁,而是被BellCreator回收,当下次有新的铃 铛在屏幕上出现时,BellCreator就把回收过来的Bell对象重新初始化后交给GameSurfaceView。目的是节约资源,提高系统的系 能。

6、Background:负责动态背景的生成。

7、AudioProvider:音频的封装,负责音效。

Android小兔子跳铃铛游戏开发过程和心得

那么整个游戏是如何跑起来,所有的对象(图片)如何动起来的呢?

相信有过一些有小游戏开发经验的人知道,在整个系统中,除了主线程外,会启动另外一个线程,这个线程负责不断刷新所有对象的状态,更新图片,从而达到动画的效果。

我也是这样做的。在GameSurfaceView中我有个内部类,RefurbishThread,它负责每100毫秒调用 GameSurfaceView.update_all_components()方法更新所有rabit,bell,bird,background状 态,然后重绘屏幕。

整个程序的源码可以在http://www.rayfile.com/files/f8b99ad1-c4e8-11e0-bb73-0015c55db73d/下载。

个人觉得Rabit,Bell等对象状态的定义是个需要花脑筋的地方,我做得还不够好,下面是定义Rabit的一些状态:

  1. private int face_state;    
  2.     private int ground_state;    
  3.     private int air_state;    
  4.     //rabit面左面右状态    
  5.     public static final int RABIT_FACE_LEFT = 1;    
  6.     public static final int RABIT_FACE_RIGHT = 2;    
  7.     //rabit在地面状态    
  8.     public static final int RABIT_NOT_ON_GROUND = 0;    
  9.     public static final int RABIT_LEFT_STOP = 1;    
  10.     public static final int RABIT_RIGHT_STOP = 2;    
  11.     public static final int RABIT_LEFT_MOVE1_ON_GROUND = 3;    
  12.     public static final int RABIT_LEFT_MOVE2_ON_GROUND = 4;    
  13.     public static final int RABIT_RIGHT_MOVE1_ON_GROUND = 5;    
  14.     public static final int RABIT_RIGHT_MOVE2_ON_GROUND = 6;    
  15.     //rabit 在空中的状态     
  16.     public static final int RABIT_ON_AIR_UP0 = 0;    
  17.     public static final int RABIT_ON_AIR_UP1 = 1;    
  18.     public static final int RABIT_ON_AIR_UP2 = 2;    
  19.     public static final int RABIT_ON_AIR_UP3 = 3;    
  20.     public static final int RABIT_ON_AIR_UP4 = 4;    
  21.     public static final int RABIT_ON_AIR_UP5 = 5;    
  22.     public static final int RABIT_ON_AIR_STOP = 6;    
  23.     public static final int RABIT_ON_AIR_DOWN = 7;   

四、技术小经验

下面是一些开发中遇到技术层面小知识,希望对大家有帮助:

1、如何将游戏画面保持横向显示,不会因为手机横竖而自动切换显示方式:在activity标签里面加上这两个属性的配置就可 android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden|navigation"

  1. <activity androidandroidandroid:name=".GameActivity"android:screenOrientation="landscape"  android:configChanges="orientation|keyboardHidden|navigation"></activity>   

2、android开发 drawable(hdpi,mdpi,ldpi)的区别:

http://hi.baidu.com/lujie_dream/blog/item/4ed68b77b28a84210cd7da97.html

3、java 线程的基础知识

http://java.chinaitlab.com/line/373702.html

4、Handler的使用

http://www.pin5i.com/showtopic-android-handler.html

五、我的困惑

1、不知正规的Android游戏开发是如何进行的,应该不是像我这样贴图这样简单吧,用游戏引擎吗?什么引擎?网上的资料感觉太少了,希望google能够多提供这方面的帮助。不知列位看官是否知道真正手机游戏如何开发的,指点一二,不胜感激。

2、体系结构做的不好,类与类之间的耦合度高的吓人。上学期虽然上了设计模式这门课,可能是学艺不精吧,这个小游戏没用什么模式。窃以为,是不是对于小 的项目,设计模式用场不是很大?或许小的项目有很大的耦合是正常的,它没有必要分很多模块然后分别进行设计?设计模式可能对大的项目很有用吧,大的项目也 需要设计模式。不知我的想法对不对,希望有牛人指点。

六、总的感悟

关于Android开发平台的体会:

我有种粗浅的感觉,在Android平台上开发与平常Java开发差别不是很大。处理配置文件外,程序的大部分代码都是用Java写的。如果你学过Java,有一点Java开发的经验,Android入门还是挺快的。 看看书,到网上查查资料,熟悉一些基本机制,如Activity,了解一些API,再动手试试,上手挺容易。当然,无知者无畏,想必Android一些深 层的机制不是那么简单,还有许多Android上的概念定义我没掌握,须认真学习体会。我想说的是做个Android菜鸟不那么困难,所以若对 Android开发有兴趣,那就行动吧~

所谓坚持:

坚持不是件容易的事。

学习Android,开始时热情很高,看书看视频感觉挺好,自己每天都有收获,很幸福。

真正做其开发时,遇到了不少困难。主要是游戏整体和细节设计,类似游戏的参考很少,有很多Class定义需要左思右想抓耳挠腮,没有同学可以共同探讨, 自己感觉又解决不了,很痛苦!很茫然!很失落!于是想要放弃,反正自己做的这件事又没有什么硬性要求,何必自己难为自己呢?

平时我总是轻视书上鼓吹坚忍不拔之人,觉得他们没什么了不起,不就是坚持嘛,很有可能是后人杜撰的。可现在,反身看看我自己,如果放弃的话,还有什么资格瞧不起别人?于是在这种心理下,硬着头皮继续学习。呵呵,当然,我也狠狠地放纵自己,努力玩,然后学习开发。

总之,我可以说虽然做这个小东西对别人来说很容易,你也许会轻视我,但我不管,我挺了下来,现在心情还不错。

责任编辑:闫佳明 来源: jizhuomi
相关推荐

2013-05-23 13:57:24

2010-03-04 09:54:24

Android开发

2012-02-28 14:48:41

2010-02-22 17:20:45

Python开发

2011-10-17 09:31:39

maven

2014-04-18 14:26:07

AndroidiOS对比

2010-07-21 14:42:15

Windows Pho

2017-09-08 17:25:18

Vue探索实践

2020-10-12 10:41:15

Linux 代码 开发

2013-07-18 13:44:13

2011-01-26 09:40:42

.NET开发

2011-06-15 15:29:25

Qt C++

2012-07-05 09:33:49

Nexus 7

2010-05-27 12:30:52

MySQL工具

2012-06-25 10:13:00

Java.NET

2016-12-30 11:10:32

Hadoop开发JVM

2011-09-05 17:07:45

MTK手机软件

2017-06-30 15:58:07

Android开发内存

2011-09-14 09:30:27

2010-06-02 10:00:25

MySQL工具
点赞
收藏

51CTO技术栈公众号