You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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;

三、射击逻辑(带冷却)

用冷却变量替代重复条件判断,防止单次点击触发多次射击:

  1. 在玩家对象的Create事件初始化参数:
shoot_cooldown = 0;
shoot_rate = 15; // 射击间隔(单位:帧),数值越小射速越快
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:03:29