浅谈Android游戏开发基础和经验
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游戏开发内容的学习能对你有所帮助!
转自: http://mobile.51cto.com/android-290870.htm
浅谈Android游戏开发基础和经验相关推荐
- 浅谈Android SDK开发
目录 浅谈Android SDK开发 SDK开发的原则 SDK设计 功能与职责边界设计 接口设计 兼容性设计 发布输出设计 SDK文档设计 SDK项目架构 组件化.模块化 统一资源管理 第三方依赖管理 ...
- Android游戏开发基础part2--Canvas画布
游戏开发基础part2--Canvas画布 又过了一周才继续做总结,四级结束了,应该可以多点时间学习游戏编程了. Canvas画布类是一个在游戏当中担当非常重要的角色,它可以绘制出不同的图形和图片,可 ...
- Android游戏开发基础part3--Paint 画笔
游戏开发基础part3--Paint 画笔 Paint画笔是绘图的辅助类,一般它是作为画布的参数来实现相应的效果,Paint类中包含文字与位图的样式.颜色等属性信息.Paint的常用方法如下: 1.s ...
- Android游戏开发基础part4--Bitmap位图的渲染与操作
游戏开发基础part4--Bitmap位图的渲染与操作 知识点1:Bitmap与BitmapFactory 如果想通过一张图片资源文件创建一个位图,则要通过位图工厂来索引图片资源文件,从而生成一张位图 ...
- 由爆火的“羊了个羊”浅谈小游戏开发
自9月初突然爆火以来,小程序游戏"羊了个羊"一路高歌猛进,日活跃用户数量最高曾一度破亿:仅两天时间,就在微博上就斩获18个关联热搜. <羊了个羊>的爆火,除了玩法很有传 ...
- 千锋Android游戏开发基础视频教程-cocos2dMars版
千锋3G学院_Android游戏开发教程_数独_01.mp4 千锋3G学院_Android游戏开发教程_数独_02.mp4 千锋3G学院_Android游戏开发教程_数独_03.mp4 千锋3G学院_ ...
- 浅谈Android系统开发中LOG的使用【转】
本文转载自:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以 ...
- 浅谈Android系统开发中LOG的使用
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...
- Android游戏开发项目实战
Android游戏开发项目实战: 手机游戏开发工程师培训教程(Android4.3.Cocos2d-x.Untity2D/3D.跨平台引擎技术) 课程讲师:厉风行 课程分类:游戏开发 适合人群:初级 ...
最新文章
- Spring源码分析【8】-MyBatis注解方法不能重载
- android VectorDrawable使用笔记(四)
- Java_关于App class loader的总结
- StackExchange.Redis性能调优
- HDU 6607 Easy Math Problem(杜教筛 + min_25 + 拉格朗日插值)
- Jmeter - 服务器性能检测
- docker没有下载完全_一个时代的结束:苹果正式关闭iTunes,但歌曲下载并没有完全消失...
- mysql存儲過程返回值_java如何获得mysql存储过程的返回值
- DEM高程数据获取方法
- 企业微信可以获取用户unionid吗?
- PS套索工具抠图及快捷键
- 记录金盾专用播放器加密视频提取工具逆向分析过程二
- 50个MySql语句
- php 对接 hotmail邮箱,php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
- MATLAB批量绘图
- 算法系列——输出所有的笛卡尔积组合
- CPU100% 问题排查
- twitter账号被冻结如何申诉,已成功解冻(我是第一次被冻结,听闻二次冻结会永久冻结)
- java+jsp基于ssm的智慧医疗系统医院挂号就诊系统-计算机毕业设计
- shell逐行读取excel并执行sql