一、游戏开发基础
1.快速进入android游戏开发
自学、demo、问题、百度&Google
2.游戏简单概括View   Canvas   Paint   刷新
3.游戏开发常用三种视图View ——>SurfaceView   2D——>  GLSurfaceView    3D
4.View游戏框架a.绘图函数onDraw
绘制图形、图片等函数都在画布类中。b.设置全屏主要操作:隐去状态栏部分、隐去标题栏部分。c。按键监听  onKeyDown、onKeyUp触屏监听    onTouchEventsetFocusable(true)焦点生效重新绘制画布  invalidate()  和  postInvalidate()触屏监听动作:按下、抬起、移动、屏幕压力、多点触屏等。setFocusableInTouchMode(true)
5.SurfaceView游戏框架a。implements    SurfaceHolder.Callback  控制SurfaceView的大小、格式等b。通过SurfaceViewHolder的lockCanvas()函数获取Canvas对象,加锁c。unlockCanvasAndPost函数用于解锁画布和提交d。刷新画布第一种   每次绘图之前,绘制一个等同于屏幕大小的图形覆盖画布上。canvas.drawRect(0,0,this.getWidth(),this.getHeigt(),paint);第二种   每次绘图之前,在画布上填充一种颜色canvas.drawColor(Color.BLACK);第三种    每次绘图之前,指定RGB来填充画布canvas.drawRGB(0,0,0);第四种   每次绘图之前,绘制一张等同于屏幕大小的图片覆盖在画布上。6.SurfaceView视图添加线程固定时间刷新画布比如倒计时、动态花草、流水、怪物、钱币等。设计一个线程不停去重绘画布,实时更新游戏元素状态。
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{private SurfaceHolder sfh;private Paint paint;private int textX =10,textY = 10;private Thread thread;private boolean flag;private Canvas canvas;private int screenW,screenH;public MySurfaceView(Context context) {super(context);sfh = this.getHolder();sfh.addCallback(this);paint = new Paint();paint.setColor(Color.WHITE);setFocusable(true);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO 视图创建,响应此函数screenW = this.getWidth();screenH = this.getHeight();flag = true;thread = new Thread(this);thread.start();}/*** 游戏绘图*/public void myDraw(){try {canvas = sfh.lockCanvas();if (canvas!= null) {//利用绘制矩形的方式刷屏
//              canvas.drawRect(0,0,this.getWidth(),this.getHeight(), paint);//利用RGB的方式刷屏canvas.drawRGB(0, 0, 0);canvas.drawText("Game", textX, textY, paint);}} catch (Exception e) {// TODO: handle exception}finally {if (canvas!= null) {sfh.unlockCanvasAndPost(canvas);}}}/*** 游戏逻辑*/private void logic(){}@Overridepublic boolean onTouchEvent(android.view.MotionEvent event) {textX = (int) event.getX();textY = (int) event.getY();return true;}@Overridepublic boolean onKeyDown(int keyCode, android.view.KeyEvent event) {return super.onKeyDown(keyCode, event);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {flag = false;}@Overridepublic void run() {while(flag){long start = System.currentTimeMillis();myDraw();logic();long end = System.currentTimeMillis();try {if (end - start <50) {Thread.sleep(50-(end-start));}} catch (Exception e) {e.printStackTrace();}}}}1).线程标识位       便于消亡线程,防止重复创建线程2).获取视图的宽和高  this.getWidth和this.getHeight3).绘图函数try一下4).提交画布必须放在finally中5).刷帧时间尽可能保持一致6.View与SurfaceView的区别a。SurfaceView不会出现因主UI线程阻塞影响按键触屏等问题。b。SurfaceView视图有双缓冲机制c。棋牌类游戏适合View,动态类游戏适合SurfaceView7.Bitmap位图的渲染与操作BitmapFactory.decodeResource()通过资源文件生成一张位图canvas.save()保存当前画布状态canvas.restore()回复上次保存的画布状态
8.游戏开发中常用png图片,支持透明度。
9.剪切区域    由画布进行设置第一种  矩形可视区域canvas.clipRect()path.addCircle(30,30.30,Direction.CCW);canvas.clipRect(path);利用path设置可视区域设置剪切区域前需要保存画布的状态。第二种  利用Regin对画布设置可视区域10. 动画角色的移动,爆炸的效果,过场的特效等。
Animation的每种动画都是对画布操作
Animation.AnimationListener
第一种  系统动画特效
AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation
第二种   自定义动画
a 在游戏逻辑处理中调整x和y轴坐标
b 利用帧动画
c  剪切图动画   最常用动态物体的动作帧全部放在一张图片中,通过设置可视区域完成。11.游戏适屏利用视图和屏幕宽高获取x和y坐标当想要用按下人物一直动的效果时,View的onKeyDown和onKeyUp一起用设置private boolean isUP,isDown,isLeft,isRight分别在onKeyDown函数中设置isUP,isDown,isLeft,isRight为true和在onKeyUp函数中设置isUP,isDown,isLeft,isRight为false12。碰撞检测a、矩形碰撞,利用两个矩形之间的位置进行判断,如果一个矩形的像素在另外一个矩形之中,或者之上,就可以认为这两个矩形发生了碰撞。b。圆形碰撞,利用两圆的圆心距进行判定,当两圆的圆心距小于两圆半径之和时,判定发生了碰撞。c。像素碰撞,以上两种方式碰撞不精确。但不推荐使用。
首先遍历算出一张位图所有的像素点坐标,然后与另外一张位图上的所有点坐标进行对比,一旦有一个像素点坐标相同,d。多矩形碰撞  多个矩形碰撞区域e。Region碰撞判断一个点是否在矩形区域内。使用Region类中的contains函数13.游戏音乐与音效播放游戏背景音乐MediaPlayer   游戏音效类 SoundPoola。MediaPlayerprepare()、start()、pause()、stop()setLooping()、seekTo()、getDuration()、getCurrentPosition()b。AudioManager音乐管理类,音量大小等setStreamVolume()、getStreamVolume()、getStreamMaxVolume()c。MediaPlayer.OnCompletionListerner  监听音乐是否播放完毕
SoundPool类  只能播放小的文件MediaPlayer优缺点1)缺点:资源占用较高,延迟时间较长,不支持多个音频同时播放等。
快速连续播放声音,会有明显的1-3s的延迟。可通过seetTo()解决。2)优点:支持大音乐文件播放,不需要加载准备时间。SoundPool优缺点1)缺点:短音频文件。最大1M空间。不要轻易使用pause和stop方法,容易造成程序莫名终止。音频格式最好用OGG格式。一般不在构造中调用播放函数进行播放,需要加载时间。
2)优点:支持多个音乐文件同时播放。13.游戏数据存储
FileInputStream/FileOutputStream  适合游戏的保存和使用,
SharedPreference适合保存配置信息
SQLite也适合保存游戏
ContentProvider不适合保存游戏
二、游戏开发实战演练
1.准备项目资源文件
2.划分游戏状态。
三、游戏开发提高
1.360°平滑游戏导航摇杆首先在屏幕上绘制两个大小不一的圆形,让小圆中心点围绕大圆做圆周运动。用户触点位置分为两种情况第一种:触点位置在大圆内或者大圆上,小圆的中心点直接跟随玩家触点即可。第二种:触点位置在大圆外,小圆中心在大圆的圆周上,但小圆所在大圆上的角度,应该等同于用户触点位置相对于大圆的角度。实际使用中,需要通过摇杆控制游戏主角的移动,首先将整个360°分成4或8等分
2.多触点实现图片缩放
3.触屏手势识别根据玩家接触屏幕时间的长短、在屏幕上滑动的距离、按下抬起的时间等包装,就是触屏事件监听GestureDetector.OnGestureListener监听手势6个主要抽象函数 onDown   onSingleTapUp   onFling  onScroll    onShowPress     onLongPressView.onTouchListener 触屏监听器接口绑定触屏监听器如下public boolean onTouch(View   view, MotionEvent  event){return  GestureDetector.onTouchEvent(event) ; }4.加速度传感器 又称重力传感器其他传感器:陀螺仪传感器、光传感器、恒定磁场传感器、方向传感器、压力传感器接近传感器、温度传感器等。SensorManager  传感器管理类
SensorManager sm = (SensorManager)MainActivity;
instance.getSystemService (Service.SENSOR_SERVICE);
Sensor传感器类
Sensor sensor = SensorManager.getDefaultSensor(int type);
SensorEventListener 传感器监听接口,监听当前传感器的属性及状态。
手机朝向x、y、z
z>0手机屏幕朝上,z<0手机屏幕朝下
当手机是纵向屏幕,
x>0当前手机左翻,x<0当前手机右翻;y>0当前手机下翻y<0上番
当手机是横向屏幕
x>0当前手机下翻,x<0当前手机上翻;y>0当前手机右翻y<0左番
5.9patch工具6.代码实现截屏功能原理:通过手动创建一张位图,通过此位图得到一个Canvas实例,利用得到的画布进行绘制, 绘制的图形都保存在最初创建的位图上。最后只要利用游戏主画布绘制这张位图即可。7.效率检视工具   TraceView8.游戏视图与系统组件共同显示9.蓝牙对战游戏BluetoothAdapter蓝牙适配器类,  对蓝牙是否可见是否可用进行监听BluetoothDevice  蓝牙设备类 ,   BluetoothSocket蓝牙连接类 ,用于发送和接收报文数据
10.网络游戏开发基础角色扮演游戏(Role-playing game),简称为RPGACT(Action Game):动作类游戏FPS是第一人称射击类游戏的简称(游戏专有名词)。FPS(First-Person Shooter Game)格斗游戏(Fight Technology Game,简称为FTG)模拟游戏(Simulation Game),简称为SIM或SLGRAC(Race Game):竞速类游戏冒险游戏(Adventure Game),简称为AVGSIM(模拟经营类):SIM (Simulation)SPT(体育类):Sports little game即时战略(RTS,Real-Time Strategy)模拟养成游戏(Education Simulation)CAG卡片类游戏PUZ儿童益智类游戏,需要通关的那种a。Socket协议Socket协议属于长连接,下次交互数据不需要再次连接,一直维持交互状态。适用于通信类游戏,如 ARPG、RPG类游戏。
InputStream  is = Socket.getInputStream();
OutputStream   os  =  Socket.getOutputStream();b、http协议http协议属于短连接,客户端正常连接到服务器后,数据交互完就断开。
11.本地化与国际化values-en-rUS等四、Box2D物理引擎游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。Box2D用于2D游戏的物理引擎。Java平台的称为JBox2D。Android游戏中常见游戏引擎有Rokon、AndEngine、libgdx等。1.创建矩形物体Box2D中存在两种2D图形,圆形和多边形。创建物体都应该设质量、摩擦力、恢复力三个基本属性。Box2D属于工厂模式,创建物体都是由工厂World生成的,不是new出来的。分为三步创建:首先创建物体皮肤,其次创建物体刚体,最后创建物体。
质量density:当物体质量设置为0时,物体视为静态物体,没有外力不会发生运动的物体。
摩擦力friction:取值通常设置0~1之间,0没有摩擦,1最强摩擦。
恢复力restitution:取值通常设置0~1之间,0物体没有恢复力,1物体有最大恢复力。
弧度-角度:body.getAngle()/180*Math.PI;
角度-弧度:body.getAngle()/Math.PI*180
遍历body
World.getBodyCount()                     world.getBodyList()
2.设置Body坐标与给Body施加力
setXForm(Vec2 position,float angle)
applyForce(Vec2 force,Vec2 point)
3.Body碰撞监听、筛选与Body传感器碰撞监听器接口 ContactListeneradd  发生碰撞,有新的接触点时响应的函数;persist    ,当已存在的接触点扔存在响应的函数。remove ,当存在的接触点被删除时响应的函数。result, 每次时间步监听,如仍有触点存在则被响应。Body碰撞筛选    FilterData类   ContactFilter监听器shouldColide   Body传感器Body传感器就是Body皮肤的一个属性,属性名为isSensor,默认值false。body.getShapeList().m_isSensor = true;
作用:一个Body传感器属性为true,不会与其他Body产生碰撞效果,但可以监听到碰撞。
4.关节  Joint关节主要作用是限制和约束Body之间的位置、距离、速度、运动轨迹等。1.距离关节  DistanceJoint   限制两个Body的质心距离永远保持不变2,旋转关节   RevoluteJoint   一个Body围绕另一个Body旋转。还需要一个力驱动BodyRevoluteJointDef实例作为力驱动旋转3.齿轮关节   GearJoint    两个Body进行齿轮咬合运动。4.滑轮关节    PulleyJoint   两个Body绑定滑轮关节,沿着一个世界锚点进行滑轮运动。5。移动关节   PrismaticJoint起两个作用,一个是让物体沿着世界锚点进行移动,另一个是让绑定在移动关节上的两个Body进行相同的动作。6.鼠标关节   MouseJoint  利用鼠标提供力的作用,拖拽Body,Body朝向鼠标点击的位置进行移动,效果如同在Body与鼠标之间绑定了一个橡皮筋。

《Android游戏编程之从零开始》笔记相关推荐

  1. 《信贷的逻辑与常识》笔记

    序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...

  2. AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟

    AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...

  3. 人工智能入门算法逻辑回归学习笔记

    逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...

  4. 【逻辑回归学习笔记】

    算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...

  5. 逻辑回归函数学习笔记

    继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...

  6. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授

    逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...

  7. LVM逻辑卷分区笔记

    磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...

  8. 适合理工直男的钟平老师逻辑英语学习笔记

    一切的一切都只是套路!             --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...

  9. 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象

    文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...

  10. 线性回归、逻辑回归学习笔记

    学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...

最新文章

  1. 超可爱,抖音爆款实时视频漫画变身特效技术
  2. core data 学习笔记
  3. WordPress制作插件中使用wp_enqueue_script('jquery')库不起作用解决方法
  4. Web前端书单从HTML到JS到AJAX到HTTP从框架到全栈
  5. SQL Profile (总结4)--使用演示示例
  6. python使用try语句捕获处理异常_Python使用try except处理程序异常的三种常用方法分析...
  7. 项目管理之敏捷开发之道
  8. lcms质谱仪_常用质谱的优缺点_液质联用(LCMS)仪器社区_仪器信息网论坛
  9. 在线直播系统搭建的功能包含哪些?
  10. 五、入门python第五课
  11. 全国二级计算机考试准考证打印官网
  12. 《A CMOS Time-to-Digital Converter With BetterThan 10ps Single-Shot Precision》论文阅读
  13. 景安虚拟主机 Typecho设置伪静态教程 Apache 环境
  14. GBase8s数据库GRANT 语句
  15. WPS无法用Ctrl V进行粘贴,怎么办?
  16. arduino液晶显示屏与温湿度传感器连接
  17. Spring AOP(切面面向接口)
  18. python实现逐步回归_Python怎么做逐步回归?
  19. Cargo更换国内源
  20. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

热门文章

  1. 分享超级表格用户在知乎上与我们的对话
  2. jdbc连接数据库以及crud(简单易懂,本人亲测可用 有源代码和数据库)
  3. [HDU 1430] 魔板
  4. saveToken介绍二
  5. Android 之类库常用包
  6. SAM4E单片机之旅——4、LED闪烁之PWM
  7. ID与Class的区别(#与。的区别)CSS
  8. 苹果+beta+软件测试计划,自讨苦吃:加入苹果Apple Beta版软件计划之后
  9. shell 启动进程 问号_shell的问号
  10. C++ 继承语法及修饰符