如何在Game Maker Studio 2中制作俯视角射击游戏控制器?
Game Maker Studio 2 俯视角射击控制器实现(GML Code 精简版)
下面是一套高效精简的俯视角射击控制器实现方案,同时附带代码瘦身技巧,帮你摆脱臃肿代码的问题:
一、基础移动控制
核心思路:用输入轴+向量归一化替代大量方向判断,同时兼容键盘/手柄输入,代码更简洁。
在玩家对象的Step事件中写入:
// 获取水平/垂直输入轴(提前在GM输入映射里配置"left""right""up""down"对应方向键/ASDW) var _input_x = input_get_axis("left", "right"); var _input_y = input_get_axis("up", "down"); // 构建移动向量并归一化(避免斜向移动速度超标) var _move_speed = 4; var _move_vec = lengthdir_vector(_move_speed, point_direction(0, 0, _input_x, _input_y)); // 应用移动 x += _move_vec.x; y += _move_vec.y;
二、鼠标瞄准控制
直接调用GM内置函数获取瞄准角度,无需手动计算三角函数:
在Step事件中添加:
// 获取角色到鼠标的瞄准角度 aim_angle = point_direction(x, y, mouse_x, mouse_y); // 同步角色 sprite 朝向 image_angle = aim_angle;
三、射击逻辑(带冷却)
用冷却变量替代重复条件判断,防止单次点击触发多次射击:
- 在玩家对象的
Create事件初始化参数:
shoot_cooldown = 0; shoot_rate = 15; // 射击间隔(单位:帧),数值越小射速越快
- 在
Step事件中添加射击逻辑:
// 冷却倒计时 if (shoot_cooldown > 0) shoot_cooldown--; // 检测左键按下且冷却完成 if (mouse_check_button_pressed(mb_left) && shoot_cooldown == 0) { // 创建子弹(替换为你的子弹对象名) var _bullet = instance_create_layer(x, y, "Instances", obj_bullet); // 设置子弹朝向 _bullet.direction = aim_angle; // 重置冷却 shoot_cooldown = shoot_rate; }
四、代码精简技巧(摆脱臃肿)
- 复用变量:把重复计算的值(比如
aim_angle)存为变量,避免多次调用相同函数 - 优先用GM内置函数:比如
point_direction、lengthdir_vector,不要自己写冗余的三角函数实现 - 封装重复逻辑:把移动、射击这类通用逻辑拆成单独脚本(Script),需要时直接调用,减少代码重复
- 取消冗余判断:不要写
if(keyboard_check(vk_left)) x--;这类单个方向的判断,用输入轴统一处理所有移动情况
内容的提问来源于stack exchange,提问作者TBNR8473
相关产品推荐
相关产品推荐

