`
ictch
  • 浏览: 132374 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 游戏开发的一些基础和个人经验

阅读更多

      大家好,很高兴可以在这里给大家介绍一些android游戏开发的基础知识。首先我想说的是,本人也只是一个刚出道的手机开发程序员,接触android 还没到两个月的时间。在此期间做了一个类似俄罗斯方块的android游戏,游戏完全又触屏来实现还有音乐播放等等一些基本的功能,游戏是基于 android sdk1.6完成。由于初识android,这个游戏也是本人开发的第一个andriod游戏,所以还有很多不足,这里只是想分享一下在开发过程中一些自己总结的经验和小技巧,希望对新手有所帮助,高手也请不吝赐教。
  一、首先我们应该知道android游戏开发的一些基本框架。
  首先是View类开发框架。在Andriod中,任何一个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);
  三、关于自适应屏幕分辨率的问题
  每款手机分辨率的不同注定是程序员开发游戏必须考虑的问题,怎样才能写一个程序而达到可以在不同分辨率的机子上运行良好,这将是决定一个游戏好坏的重要因素之一。在游戏资源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;
  通过以上代码可以获得当前机型的屏幕像素,然过比列换算可以实现代码中坐标的灵活应用。

  
  四、如何锁定屏幕是横屏还是竖屏
  一款游戏通常不会设计成横屏竖屏都可玩,会固定成横屏或竖屏。只需在AndroidManifest.xml里面配置一下就可以了,加入这一行android:screenOrientation="landscape"。
  例如(landscape是横向,portrait是纵向)。
  五、view与view之间的跳转
  一个游戏不会只有一个view,比如欢迎动画,游戏画面,菜单页面等等,如何实现它们之间的跳转,这里有一个方法,就是用Handler类实现。直接看代码:
  Handler myHandler = new Handler(){
  public void handleMessage(Message msg){
  if(msg.what == 1){
  //控制页面的显示...
  }
  if(msg.what == 2){
  //控制页面的显示...
  }
  }
  };
  然后用:myHandler.sendEmptyMessage(1)来实现切换。

分享到:
评论

相关推荐

    android开发揭秘PDF

    5.1 Android游戏开发框架 5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像...

    《Android应用开发揭秘》源码

     5.1 Android游戏开发框架  5.1.1 View类开发框架  5.1.2 SurfaceView类开发框架  5.2 Graphics类开发  5.5.1 Paint和Color类介绍  5.2.2 Canvas类介绍  5.2.3 几何图形绘制  5.2.4 字符串绘制  5.2.5 图像...

    《Android应用开发揭秘》附带光盘代码.

     5.1 Android游戏开发框架  5.1.1 View类开发框架  5.1.2 SurfaceView类开发框架  5.2 Graphics类开发  5.5.1 Paint和Color类介绍  5.2.2 Canvas类介绍  5.2.3 几何图形绘制  5.2.4 字符串绘制  5.2.5 图像...

    Android应用开发揭秘pdf高清版

    5.1 Android游戏开发框架 5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像...

    android开发资料大全

    Android游戏开发系列源码+CHM+书籍截图+目录】 Android developer guide中文翻译文档 Android开发开发技巧之 EditText 属性、 ProgressBar 各种样式大全 android用户界面之EditText教程实例汇 android用户界面之...

    个人根据Android移动开发案例详解手写的一个连连看游戏

    本资源希望能都初学Android的人有帮助,另外对android游戏开发有兴趣的也可以看看。这里面的源码有我个人的详细解析(基本精确到每行都解释了,因为我也是个菜鸟,希望能节省你们的时间)。android连连看游戏代码很...

    Android应用开发揭秘

    5.1 Android游戏开发框架 5.1.1 View类开发框架 5.1.2 SurfaceView类开发框架 5.2 Graphics类开发 5.5.1 Paint和Color类介绍 5.2.2 Canvas类介绍 5.2.3 几何图形绘制 5.2.4 字符串绘制 5.2.5 图像绘制 5.2.6 图像...

    Android基于传感器的小球游戏.zip

    可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板...

    几个小游戏,用于熟悉android基础知识.zip

    可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板...

    android连连看游戏源代码(加入8种关卡设计)

    说明:这是本人根据 awen_PC 上传的代码《个人根据Android移动开发案例详解手写的一个连连看游戏2》(http://download.csdn.net/detail/awen_PC/3174778)而改写的连连看游戏。 在原来代码的基础上增加了7种不同的...

    Android期末小项目

    期末小项目涉及的内容有用户登录注册模块,通讯录模块,个人信息模块,精彩视频推荐模块。涉及到的开发软件是Android studio

    天天数钱。基于Android游戏代码.zip

    可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板...

    基于Android studio开发的推箱子Java小游戏+源代码+文档说明

    基于Android studio开发的推箱子小游戏 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内...

    基于android的2048小游戏.zip

    可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板...

    安卓移动开发课程设计/Android期末大作业-数独游戏(安卓版)

    安卓移动开发课程设计/Android期末大作业-数独游戏(安卓版) - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,...

    基于Android和java的音乐类游戏 ,基于java socket实现的服务器端代码.zip

    可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...

    基于Android的趣味高数App的设计与实现.pdf

    本文主要讨论了基于Android的趣味高数App的设计与实现,旨在开发一款移动学习系统,满足大学生学习需求和移动学习特点。通过研究,设计了一个趣味高数移动学习系统,既增强了学生对高数的学习兴趣,也为高等教育的...

    基于java五子棋游戏开发设计说明.doc

    基于 Java 五子棋游戏开发设计说明 本文档介绍了基于 Java 语言开发的五子棋游戏的设计说明。五子棋是一种古老的传统黑白棋种,具有广泛的群众基础,是一种老少皆宜的棋类休闲游戏。开发一款五子棋游戏可以使广大...

Global site tag (gtag.js) - Google Analytics