在群里看见一个群友提问,所以顺手写了写
方法1:通过两坐标角度,在x轴和y轴分别增加位移量
if (mouse_check_button_pressed(mb_left)) { dir = point_direction(x, y, mouse_x, mouse_y); // 鼠标点击位置和物体位置的角度 var rad = dir * (pi / 180); // 角度转弧度 x += step * cos(rad); y -= step * sin(rad); // 记得y轴正方向向下 }
变量含义:
step:每次位移的步长
注意的点:
point_direction返回的是角度,而三角函数的参数是弧度,需要先进行转换。大概是计算器用多了,老觉得参数应该写角度
方法2:通过GMS2自带库函数
if (mouse_check_button_pressed(mb_left)) mp_linear_step(mouse_x, mouse_y, step, 1);
另一个群友提示的这个函数,一行搞定,非常方便,遇到障碍物还可以自动停下。最后一个参数若设置为0,则遇到标记为实体(solid)的物体(object)会停下;若设置为1,则遇到所有实例都会停下
两种方法都能实现任意方向移动,但如果是二、四、八方向的游戏,方法1应该更好,因为可以自定义移动的方向。如果不想瞬移,在此基础上应该还可以结合距离函数等控制移动速度和时间。
以及GMS的库函数真是有不少方便的库函数,可以直接实现游戏的一些基础功能,应该多熟悉一下。
————————
从今天开始,打算每天记录一点小碎片。注释会不会写得过于详细了?但我自己是会经常忘记自己的代码在干什么的那种,所以多写点应该有益无害。
暂无关于此日志的评论。