勤 · 笔记

《山魂》相机系统完成 游戏内相机的工作原理

时间:2019-07-10作者:沙木来源:FourWoods

由于相机系统的加入,《山魂》正式成为一款可以拍照的行走模拟器。

QQ图片20190707211557.png

  《山魂》最初的设计定位是一款模拟爬山,欣赏沿途风景的轻松休闲小游戏,比赛看谁爬得更高。后来加入随机景致生成机制后,觉得每次截屏下来的图片都挺好看的,于是就有了这种随机生成的风景如果能够拍照记录下来该多好的念头。

  在启动制作拍照功能之前,我思考了很久如何来记录屏幕中的画面。最先想到的是调用系统截屏的方式,这种方法技术兼容性可能存在问题不说,截屏出来的图片体积应该不小,存放在玩家本地机太占空间,存放在服务器的话又需要联网才能操作,PASS!后来绞尽脑汁也想不到一个妥当的方法,在都快放弃拍照功能的时候,突然灵光乍现,既然游戏场景中的景致都是随机“绘制”的,为什么不能在按下快门的一瞬间记录下景致中各元素的属性情况,然后再在相册中读取这些元素属性,还原出拍摄的景致为相片呢?

  于是,我将构成随机景致的所有对象放入一个标签中,然后拍照的时候就统一处理这个标签,完成一套向“相片数组”里推送属性数据的动作,在“相片数组”生成后,再将这张“相片数组”推入进“影集数组”中。这样按快门后产生的数据就算找到生成方法了,每张“相片数组”中会记录参与其中的对象的“类型名”、“缩放比例”、“XY坐标值”、“旋转角度”、“透明度”、“海拔数”等等方面的属性信息,当查看相片的时候,就会将这些对象再重构出来,形成一张当时拍摄的照片的图形样子。

  由于有了以上的框架基础,要实现照片的排序和影集的翻页也变得比较容易了。同时,对于要实现判断照片中的元素情况给予自动打分和评奖的需求,也变得逻辑清晰了起来。如果是截屏取图,要进行照片的打分算法还得加入图形识别技术。。。那可就是大炮打蚊子了。

  最终,整个相机系统在游戏中非常流畅的跑了起来:


如何定制? 注册登录——进入用户中心——点击我要定制