首页 > Android频道 > 【Android研究院之游戏开发】 > Android研究院之游戏开发摄像头更新 (二)
2012
04-28

Android研究院之游戏开发摄像头更新 (二)

Android研究院之游戏开发摄像头更新 (二) - 雨松MOMO程序研究院 - 1

游戏中摄像头的原理介绍

       在游戏开发中更新摄像头的位置可以决定屏幕显示的内容,尤其是RPG类游戏摄像头有着非常重要的作用,我举一个例子 有时候我们在玩RPG游戏的时候进入一个新的场景 触发一段脚本后 发现镜头开始向上移动 根据镜头移动玩家可以大概浏览一下这个场景有什么东西 ,触发什么样的剧情。这个实现的方式就是游戏摄像头原理。

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

Android研究院之游戏开发摄像头更新 (二) - 雨松MOMO程序研究院 - 2

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

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

Android研究院之游戏开发摄像头更新 (二) - 雨松MOMO程序研究院 - 3

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

       昨天有朋友跟我提出这种用数组的方式来绘制地图不科学我很同意他的观点,为什么不科学? 原因是现在我们只有一个场景我们用一个数组来绘制地图 万一我们的游戏有100个场景 我们岂不是要在程序中写100个数组了?其实在实际开发中我们是把这些地图的信息转成xml文件 打到游戏的包中 玩家在切换游戏场景的时候便会读取当前游戏场景中的地图xml文件。其实这些xml文件中也是保存这地图的二位数组信息 但是这样做的好处就是数据驱动  程序员不用定义N个数组 做N种判断 只须要根据当前切换的场景的ID就可以得到地图的信息 十分方便 也可以避免代码中由于笔误造成的的错误 何乐而不为。

       但是不管用任何方法处理数据 它的绘制原理都是一样的。

如何更新游戏中摄像头

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

Android研究院之游戏开发摄像头更新 (二) - 雨松MOMO程序研究院 - 4

Android研究院之游戏开发摄像头更新 (二) - 雨松MOMO程序研究院 - 5                目前以每10000毫秒更新一下摄像头的位置 (随机数) 我们有了摄像头的位置以后 就可以在算出背景图片的相对显示位置 移动背景图片的位置后就可以给玩家制造出一种摄像头在移动的假象了。

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

Android研究院之游戏开发摄像头更新 (二) - 雨松MOMO程序研究院 - 6

最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习
雨松MOMO希望可以和大家一起进步。

下载地址:http://vdisk.weibo.com/s/aa8MZ

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Android研究院之游戏开发摄像头更新 (二)》有 4 条评论

  1. 折颜 说:

    松哥 有两行代码我看不懂 能讲解下嘛 各参数的意义 和实现的功能你写的好像和网上百度到的方法 不太一样 比如drawBitmap的参数bitmap,src,dst,paint你的2,3参数是什么意思,还有clipRect的功能和参数canvas.clipRect(x, y, x src_xp, y src_yp); canvas.drawBitmap(bitmap, x – src_x, y – src_y, paint);

  2. 折颜 说:

    松哥 有两行代码我看不懂 能讲解下嘛 各参数的意义 和实现的功能你写的好像和网上百度到的方法 不太一样 比如drawBitmap的参数bitmap,src,dst,paint你的2,3参数是什么意思,还有clipRect的功能和参数canvas.clipRect(x, y, x + src_xp, y + src_yp); canvas.drawBitmap(bitmap, x – src_x, y – src_y, paint);

  3. 蓓蕾 说:

    请问如果用XML文件的话是不是要解析xml才可以呢?采用mapmaker可以编辑手机地图么?
    ps:我刚刚接触Andriod没多久,我用mapmaker地图编辑器编辑地图时,它产生的是一个xml文件。

留下一个回复

你的email不会被公开。