美文网首页GMS2入门
Dev_log_2 关于相机与视野

Dev_log_2 关于相机与视野

作者: 想当狗策划 | 来源:发表于2021-02-03 23:24 被阅读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,再不断更新相机的视野。

    相关文章

      网友评论

        本文标题:Dev_log_2 关于相机与视野

        本文链接:https://www.haomeiwen.com/subject/rvkvtltx.html