游戏中摄像头的原理介绍

       在游戏开发中更新摄像头的位置能够决定屏幕显示的内容,尤其是RPG类游戏摄像头有着很关键的数据。我举一个样例 有时候我们在玩RPG游戏的时候进入一个新的场景 触发一段脚本后 发现镜头開始向上移动 依据镜头移动玩家能够大概浏览一下这个场景有什么东西 。触发什么样的剧情。

这个实现的方式就是游戏摄像头原理。

上章学习了Android游戏开发地图编辑器有须要的能够看下。

如图所看到的:首先摄像头显示的区域也是手机屏幕显示的区域 假设须要更改摄像头的位置  事实上是更改背景地图的位置 利用程序拖动背景地图  给玩家一种假象让玩家感觉像是摄像头在移动而不是背景地图在移动。

Android研究之游戏开发摄像头更新 (二) - 第1张  | 成功智慧网-专注游戏编程开发!

游戏中地图的绘制原理介绍        依据地图编辑器生成的出来的数组的每个tile 的 ID 找到每个tile的地图资源原始文件的XY坐标 算出来图片的显示位置利用程序的分割的方法把每个tile分割出来显示在手机屏幕中。 分割图片的代码所看到的:

<strong>	/**
	 * 绘制图片中的一部分图片
	 *
	 * @param canvas
	 * @param paint
	 * @param bitmap
	 * @param x
	 * @param y
	 * @param src_x
	 * @param src_y
	 * @param src_width
	 * @param src_Height
	 */
	private void DrawClipImage(Canvas canvas, Paint paint, Bitmap bitmap,
		int x, int y, int src_x, int src_y, int src_xp, int src_yp) {
	    canvas.save();
	    canvas.clipRect(x, y, x + src_xp, y + src_yp);
	    canvas.drawBitmap(bitmap, x - src_x, y - src_y, paint);
	    canvas.restore();
	}</strong>

canvas.save();
分割图片之前先把Canvas保存起来 然后在分割  绘制结束后
canvas.restore();
在把Canvas的在状态重置回来 假设不这么做的话 第一张图片分割后就会挡住以后全部的图片,所以大家一定要记住这一点喔。

Android研究之游戏开发摄像头更新 (二) - 第2张  | 成功智慧网-专注游戏编程开发!</p><p>

 

图所看到的:每一张tile的绘制原理就是这样。讲到这里有些朋友可能就要问 假设我的地图无限大那依据这种方法岂不是要循环无限次?事实上屏幕须要绘制的tile数量仅仅须要绘制屏幕显示区域以内的, 屏幕现实区域以外的我们不用考虑绘制 仅仅须要更新地图的坐标数据就能够。比方我的模拟器屏幕的大小是320X480 那么我实际绘制的tile数量仅仅是 10 X15 (块)。事实上游戏开发绘制中另一个更重要的绘制技术就是双缓冲技术它能够用来解决屏幕闪烁问题,下一章中我会具体介绍。

       昨天有朋友跟我提出这样的用数组的方式来绘制地图不科学我非常允许他的观点,为什么不科学? 原因是如今我们仅仅有一个场景我们用一个数组来绘制地图 万一我们的游戏有100个场景 我们岂不是要在程序中写100个数组了?事实上在实际开发中我们是把这些地图的信息转成xml文件 打到游戏的包中 玩家在切换游戏场景的时候便会读取当前游戏场景中的地图xml文件。事实上这些xml文件里也是保存这地图的二位数组信息 可是这样做的优点就是数据驱动  程序猿不用定义N个数组 做N种推断 仅仅需要依据当前切换的场景的ID就能够得到地图的信息 十分方便 也能够避免代码中因为笔误造成的的错误 何乐而不为。

       可是无论用不论什么方法处理数据 它的绘制原理都是一样的。

怎样更新游戏中摄像头

效果图:程序取随机数更新游戏摄像头

Android研究之游戏开发摄像头更新 (二) - 第3张  | 成功智慧网-专注游戏编程开发!</p><p>

Android研究之游戏开发摄像头更新 (二) - 第4张  | 成功智慧网-专注游戏编程开发。

                眼下以每10000毫秒更新一下摄像头的位置 (随机数) 我们有了摄像头的位置以后 就能够在算出背景图片的相对显示位置 移动背景图片的位置后就能够给玩家制造出一种摄像头在移动的假象了。

地图块是我新拼的 长宽的tile块数是20X20。

Android研究之游戏开发摄像头更新 (二) - 第5张  | 成功智慧网-专注游戏编程开发。