【Android小游戏】安卓小游戏开发(直播手把手教学系列一)
2015-09-19 19:11
417 查看
1.开发须知
在安卓开发中, SurfaceView的地位是很重的,surfaceView 是View基础上派生出的扩展,是游戏中常用的显示类,而安卓游戏中主要分为两大模块,一。控制类,二。显示类。
可见surfaceView的重要性。
多年经验总结如下:
1.View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。
2.SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。
以上可知SurfaceView优于View
2.开发游戏视图
(1)。第一步,完成游戏背景,这是最简单的。
即绘制图像:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/31/2919d09ca211b99349374cb3160706f8)
用上一个自定义类MySurface类,继承 SurfaceView
其中
就是绘制内容。
2.绘制人物
游戏中所必须具备的元素,大致为三种: 主角,敌方(或为友方),道具。
那么接下来我们来绘制人物
在安卓开发中, SurfaceView的地位是很重的,surfaceView 是View基础上派生出的扩展,是游戏中常用的显示类,而安卓游戏中主要分为两大模块,一。控制类,二。显示类。
可见surfaceView的重要性。
多年经验总结如下:
1.View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。
2.SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。
以上可知SurfaceView优于View
2.开发游戏视图
(1)。第一步,完成游戏背景,这是最简单的。
即绘制图像:
用上一个自定义类MySurface类,继承 SurfaceView
package yyc.com.mysurface; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.util.AttributeSet; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * Created by Administrator on 2015/9/18. */ public class MySurface extends SurfaceView implements SurfaceHolder.Callback,Runnable { private Rect gameRect=new Rect(); private Bitmap mBg; private SurfaceHolder mHolder; private Canvas mCanvas; private Thread thread; private boolean r; public MySurface(Context context) { super(context); mp=new Paint(); mp.setAntiAlias(true); mp.setDither(true); mHolder=getHolder(); mHolder.addCallback(this); setZOrderOnTop(true); mHolder.setFormat(PixelFormat.TRANSLUCENT); setFocusable(true); setFocusableInTouchMode(true); this.getKeepScreenOn(); } @Override public void surfaceCreated(SurfaceHolder holder) { r=true; thread=new Thread(this); thread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { gameRect.set(0, 0, width, height); } @Override public void surfaceDestroyed(SurfaceHolder holder) { r=false; } @Override public void run() { while (r) { long start = System.currentTimeMillis(); draw(); long end = System.currentTimeMillis(); try { if (end - start < 50) { Thread.sleep(50 - (end - start)); } } catch (InterruptedException e) { e.printStackTrace(); } } } Paint mp; private void draw() { try { mCanvas=mHolder.lockCanvas(); mBg=loadImageByResId(R.drawable.bg); mCanvas.drawBitmap(mBg, null, gameRect, null); if (mCanvas != null) { // mp.setColor(Color.BLUE); // mCanvas.drawRect(20, 30, 50, 50, mp); // // mBg=loadImageByResId(R.drawable.bg); // mCanvas.drawBitmap(mBg, null, gameRect, null); // mp.set } } catch (Exception e) { } finally { if (mCanvas != null) mHolder.unlockCanvasAndPost(mCanvas); } } private Bitmap loadImageByResId(int id){ return BitmapFactory.decodeResource(getResources(), id); } }
其中
mCanvas.drawBitmap(mBg, null, gameRect, null);
就是绘制内容。
2.绘制人物
游戏中所必须具备的元素,大致为三种: 主角,敌方(或为友方),道具。
那么接下来我们来绘制人物
相关文章推荐
- Android动画操作
- Android多线程机制之Handler
- Android高级控件小练习
- Android系统属性System Property
- Parcelable和Serializable的区别
- android-自定义TextView
- Android----异步加载
- Android基础入门教程——2.4.2 ListView简单使用
- Android仿IOS有弹性ScrollView
- Android学习实践:1.初次创建Android项目遇到的各种问题
- 解决安卓中软键盘覆盖activity的方案
- Android SDK Manager中各个文件的作用-总结
- 细说Android drawable
- android studio集成极光推送,获取附加字段详细,并提供自己写的一个demo,绝对不是官方demo
- android intent和intent action大全
- Android Action Bar
- Android个人开发者需要收藏的好东西
- 年月日关联 判断平年闰年月份天数判断 放入Spinner 菜鸟
- android AsyncTask介绍
- Android中的线程机制