GMS2入门

Dev_log_2 关于相机与视野

2021-02-03  本文已影响0人  想当狗策划

这里,我的精力主要放在了,如何给玩家提供视野,如何让游戏在视觉上与玩家直接交互。

首先,新建一个对象,不指定任何精灵。

这是它的Create事件

camera = camera_create();//新建相机,将其赋值给camera

//相机基本属性矩阵
var vm = matrix_build_lookat(x,y,-10,x,y,0,0,1,0);//新建一个矩阵vm,保存相机的视野信息
var pm = matrix_build_projection_ortho(640,480,1,10000);//新建一个矩阵pm,保存相机的投影信息

//为camera设定视野矩阵以及投影矩阵
camera_set_view_mat(camera,vm);
camera_set_proj_mat(camera,pm);

//将camara赋值给view_camera[0],即房间第0号相机
view_camera[0] = camera;

//将玩家的目标赋值给follow
follow = obj_player;

//初始化xTo,yTo
xTo = x;
yTo = y;

这里值得一提的有:

matrix_build_lookat(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup)

这个函数会返回一个矩阵的索引,这个矩阵记录了相机视野的一些信息:
x/y/zfrom:即相机的所在地的坐标点
x/y/zto:即相机所看向的位置的坐标点
x/y/zup:没有搞清楚怎么用,似乎是为了旋转相机角度而存在的参数,欢迎补充

matrix_build_projection_ortho(w,h,znear,zfar)

这个函数同样返回一个矩阵的索引,记录的是关于相机投影的一些信息:
w(width)和h(height)即为投影的宽度和高度
znear和zfar为投影最近和最远的横截面
这里还有一个类似的函数matrix_build_projection_perspective(w,h,znear,zfar)
和此函数的区别在于:
ortho指的是orthographic projection,即正交投影,正视投影
perspective即perspective projection,透视投影
下图比较了两种不同投影的实际效果:


投影对比

完成create事件后,再新建一个step事件:

x += (xTo - x)/25;//如果希望相机移动变快,可以减小分母
y += (yTo - y)/25;

if(follow != noone)
{
    xTo = follow.x;
    yTo = follow.y;
}

var vm = matrix_build_lookat(x,y,-10,x,y,0,0,1,0);
camera_set_view_mat(camera,vm);

这个就很好理解了,不停更新相机这个目标的x,y值,用xTo,yTo来读取玩家的目标的坐标,然后将其重新赋值给相机的x,y,再不断更新相机的视野。

上一篇 下一篇

猜你喜欢

热点阅读