Android游戏开发基础和经验是本文要介绍的内容,主要是来了解并学习Android游戏开发的内容实例,具体关于Android游戏开发内容的详解来看本文。
做一个类似俄罗斯方块的android游戏开发,游戏完全又触屏来实现还有音乐播放等等一些基本的功能,游戏是基于
android
sdk1.6完成。由于初识android,这个游戏也是本人第一个android游戏开发,所以还有很多不足,这里只是想分享一下在开发过程中一些自己总结的经验和小技巧,希望对新手有所帮助,高手也请不吝赐教。
一、首先我们应该知道android游戏开发的一些基本框架。
Android游戏开发中首先是View类开发框架。在Android游戏开发中,任何一个View类都只需要重写onDraw方法来实现界面显示。游戏的核心是不断的绘图和刷新界面,在
Android中最常用的方法是利用Handler来实现UI线程的更新,也可以直接在run方法中使用postInvalidate()方法在线程中更新界面。其次,是SurfaceView类开发框架。
当需要开发复杂的游戏,而且对程序的执行效率很高时,View类就不能满足需求了,这是必须用
SurfaceView类进行开发,这也是主流开发框架。在使用时需要对其进行创建、销毁,情况改变时进行监视,这就要实现
SurfaceHOlder.Callback接口,如果要对被绘制的花布进行裁减,控制其大小时都需要使用SurfaceHOlder来完成处理。在程序中,SurfaceHOlder对象需要通过getHolder方法来获得,同时还需要addCallback方法来添加“回调函数”。
例如下面一个简单的SurfaceView类框架:
- public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable {
-
SurfaceHolder mSurfaceHolder = null;
- public GameSurfaceView(Context context) {
- super(context);
-
mSurfaceHolder = this.getHolder();
- mSurfaceHolder.addCallback(this);
- this.setFocusable(true);
- }
- public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){
- }
- public void surfaceCreated(SurfaceHolder holder ){
- new Thread(this).start();
- }
- public void surfaceDestroyed(SurfaceHolder holder){
- }
- public void run(){
- while (true){
- try{
- Thread.sleep(1000);
- }
- catch(Exception e){
- }
- synchronized(mSurfaceHolder){
- Draw();
- }
- }
- }
- private void Draw() {
-
Canvas canvas= mSurfaceHolder.lockCanvas();
- ......
- mSurfaceHolder.unlockCanvasAndPost(canvas);
- }
- }
然后在activity类中 :setContentView(GameSurfaceView的对象)。
二、游戏开发中常用到的基本类
Android游戏开发中通过graphics类来显示2D图形,graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图片)等常用类。
例如绘制字符串用canvas类的drawText方法来实现,drawRect用来绘制矩形,设置透明度可以用paint类的setAlpha,同时
Color.rgb方法可以直接获得整形数值代表的颜色。此外在绘制图片时应该首先从资源文件中装载图片,然后才能绘制到屏幕上去。具体代码如下:Bitmap
mypic = null;
mypic=((BitmapDrawable)getResources().getDrawable(R.drawable.pic)).getBitmap();
Canvas canvas = new Canvas(); canvas.drawBitmap(mypic,x,y,null);
三、关于自适应屏幕分辨率的问题
Android游戏开发中每款手机分辨率的不同注定是程序员开发游戏必须考虑的问题,怎样才能写一个程序而达到可以在不同分辨率的机子上运行良好,这将是决定一个游戏好坏的重要因素之一。在游戏资源res下有三个和图片存储有关的文件夹:drawable-hdpi、drawable-mdpi、drawable-ldpi。
drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA
(480x854),drawable-mdpi里面存放中等分辨率的图片,如HVGA
(320x480),drawable-ldpi里面存放低分辨率的图片,如QVGA
(240x320),系统会自动根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。当然,除了准备好几组不同分辨率的图片以外,在代码中图片坐标和触屏事件的坐标都要灵活的处理,这样才能实现一个程序多机型运行的目标。
- DisplayMetrics dm = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
-
int screenWidth = dm.widthPixels;
-
int screenHeight = dm.heightPixels;
通过以上代码可以获得当前机型的屏幕像素,然过比列换算可以实现代码中坐标的灵活应用。
四、如何锁定屏幕是横屏还是竖屏
一款游戏通常不会设计成横屏竖屏都可玩,会固定成横屏或竖屏。Android游戏开发中只需在AndroidManifest.xml里面配置一下就可以了,加入这一行
- android:screenOrientation="landscape"
例如(landscape是横向,portrait是纵向)。
五、view与view之间的跳转
Android游戏开发中一个游戏不会只有一个view,比如欢迎动画,游戏画面,菜单页面等等,如何实现它们之间的跳转,这里有一个方法,就是用Handler类实现。直接看代码:
- Handler myHandler = new Handler(){
- public void handleMessage(Message msg){
-
if(msg.what == 1){
- //控制页面的显示...
- }
-
if(msg.what == 2){
- //控制页面的显示...
- }
- }
- };
然后用:myHandler.sendEmptyMessage(1)来实现切换。
分享到:
相关推荐
Android框架浅谈
本书是面向Android初学者的教程,介绍设计开发Android应用程序的基础理论和实践方法,讲解Android系统的体系结构、Java语言与面向对象编程基础、XML基础、开发环境搭建、Android应用程序的调试和发布方法、用户界面...
浅谈Android移动开发程序员的职业发展之路
浅谈Android开发环境搭建.pdf
浅谈android线程模型
深入浅出Android软件开发教程 。
浅谈汽车SOA架构开发和实施过程中的微服务化.pdf浅谈汽车SOA架构开发和实施过程中的微服务化.pdf浅谈汽车SOA架构开发和实施过程中的微服务化.pdf浅谈汽车SOA架构开发和实施过程中的微服务化.pdf浅谈汽车SOA架构开发...
Android开发\深入浅出Android.pdf
深入浅出Android「Android」是一个基于 Linux 核心(kernel) 的开放手机平台操作系统。与 Windows Mobile、Symbian 等手机操作系统处在同一级别。 对于设备制造商来说,「Android」是一个免费的平台。「Android」操作...
浅谈游戏开发平台Unity3D的应用与发展前景.docx
深入浅出Android 软件开发教程 深入浅出Android 软件开发教程
Android 3D游戏案例开发大全 作者: 吴亚峰 于复兴 杜化美 副标题: 游戏案例开发大全 ...《Android 3D游戏案例开发大全》非常适合初学者或有一定Android基础,并希望学习Android 3D高级开发技术的读者使用。
android游戏开发大全 案例源程序前五章
浅谈Android技术.pdf
深入浅出Android PDF版,Android开发经典教材,从某种角度来说,Android 代表着一个崭新的开放源代码的智能手机操作系统平台、一个友善的免费应用程序开发环境、一个与世界各地的程序开发者,站在相同起跑点上的公平...
浅谈高职Android应用开发课程的建设.pdf
浅谈android的selector背景选择器
浅谈Android五大布局 ——LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout、TableLayout
浅谈Android屏幕自适应.pdf