`
ming_fanglin
  • 浏览: 221043 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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)来实现切换。
1
0
分享到:
评论

相关推荐

    千锋Android游戏开发基础视频教程(10集)

    教程名称: 千锋Android游戏开发基础视频教程(10集)【】千锋Android游戏开发基础视频教程-大纲【】千锋Android游戏开发基础视频教程01~02【】千锋Android游戏开发基础视频教程03~04【】千锋Android游戏开发基础...

    Android游戏开发基础

    取之于网络,回馈于网络. 自己整理了此文章 Android游戏开发基础, 很基础的东西,做游戏所需要的基本技术都在里面,但是要求有hello world开发的经验

    android游戏开发基础小球运动

    android 游戏 开发 基础 小球运动

    android游戏开发基础视频

    http://video.sina.com.cn/playlist/4003320-1320045357-1.html#33844107?Android游戏及应用开发之2? http://video.sina.com.cn/playlist/4003320-1320045357-1.html#33845175?Android游戏及应用开发之3? ...

    Android游戏开发基础和经验.doc

    Android游戏开发基础和经验.doc

    android游戏开发基础模拟粒子系统

    android游戏开发粒子模拟

    Android游戏开发基础飞机大战

    Android飞机大战,全注释,适合学生狗期末答辩,虚拟机真机都好运行

    android应用开发范例精解

    第2篇为应用开发篇,通过实例介绍了Android UI布局、Android人机界面、手机硬件设备的使用、Android本地存储系统、Android中的数据库、多线程设计、Android传感器、Android游戏开发基础、Android与Internet,以及...

    Android游戏开发技术实战详解

    资源名称:Android游戏开发技术实战详解 内容简介:《Android游戏开发技术实战详解》详细讲解了Android游戏开发...第3章讲解了Android游戏开发的基础知识; 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Android游戏开发实践指南

    《华章程序员书库:Android游戏开发实践指南》中以开源引擎AndEngine为基础,不仅以专题的形式巧妙地将Android游戏开发必须掌握的各项关键技术(场景、图层、图形绘制、精灵、动画、物 资源太大,传百度网盘了,链接...

    Android游戏开发PDF

    Android已经成为很多手机厂家的首选操作平台,Android的Application也就越来越火爆了,这是Android游戏开发方面的一些基础知识,希望对大家有所帮助

    ANDROID游戏开发大全配套源码(全网最全)

    无需多言,android游戏开发基础书《ANDROID游戏开发大全》的所有配套源码,共十九章!

    android游戏开场动画源代码

    Android平台很经典的游戏Abduction(奶牛跳高)开场动画源代码。

    Android 3D游戏案例开发大全 pdf

    《Android 3D游戏案例开发大全》以Android手机3D游戏开发为主题,通过9个典型范例,全面深入地讲解了Android平台下如何利用OpenGL ES进行3D游戏开发的技术和技巧。  全书共分10章,其中第1章为Android平台的简介及...

    Android_3D游戏开发技术详解与典型案例-pdf.part1.rar

    因此,在现在市面上,Android游戏开发的书籍特别是Android 3D游戏开发的书籍还是有相当大的市场需求。  《Android3D游戏开发技术详解与典型案例》既介绍了Android 3D游戏开发中必知必会的基础知识,同时通过7个...

    基于OpenGL的Android+3D游戏开发技术详解与典型案例(源码)

     第3章 不积跬步,无以至千里—游戏开发基础知识本章初步介绍了游戏开发的基础知识  第4章 千里之行,始于足下—3D开发基础知识本章介绍了3D开发中的基础知识,包括OpenGL ES的介绍及OpenGL ES中绘制模型的原理,...

    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 3D游戏开发技术详解与典型案例》各章节源码

    因此,在现在市面上,Android游戏开发的书籍特别是Android 3D游戏开发的书籍还是有相当大的市场需求。  《Android3D游戏开发技术详解与典型案例》既介绍了Android 3D游戏开发中必知必会的基础知识,同时通过7个真实...

Global site tag (gtag.js) - Google Analytics