之前有朋友在群里问过 camera 和 viewport 的问题,当时没想到太好的例子来说明,今天刚好看到一张相机广告图,感觉其实就很好的解释了 camera 、camera view 以及 viewport 这三者的关系

camera : 就是图中的照相机,是观测某个画面的所处点位
camera view :是图中被相机拍摄到的画面区域,是相机所能拍摄到的范围(甚至可以通过调整焦距来缩放画面)
viewport : 是图中相机的屏幕,是具体拍摄到画面的显示窗口
在游戏中的镜头是一个虚拟概念,实际上并不存在摄相机实体,我们能看见的只是通过某个 camera 看到的游戏画面投影即 camera view 所框选到的内容,给 camera 设定了跟随玩家角色就等于相机镜头跟着角色移动,因此拍摄到的 camera view 也会跟着移动。
而 viewport 则是实际上我们看到的游戏画面尺寸,就像图片中实际的景色画面不管多大,到屏幕上显示的画面大小就这么点,而当你把这个监看屏幕接到别的设备上时又可以调整成其他尺寸,游戏也是如此,游戏画面的显示分辨率取决于你设置的 camera 尺寸,但是实际显示到玩家屏幕上的尺寸则取决于 viewport 的设置,比如一个 320×480 的游戏可以调整成 640×960 (甚至更高分辨率)来显示,比如《蔚蓝》的游戏分辨率其实只有 320×180。
最后,在 GameMaker 中第一个 room 的 viewport 尺寸往往也决定了游戏的窗口尺寸(windows size),但在游戏中直接修改 viewport 则不会改变窗口尺寸,得用 window_set_size()
或 window_set_rectangle()
等函数去修改。