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

GameMaker Studio 2 v2.3.2点击拖拽obj_iron功能失效问题求助

GameMaker Studio 2 拖拽失效修复方案

问题根因

  • Step事件首行强制赋值global.picked_up_iron = 0,每帧都会清空上一帧记录的拖拽实例,导致拖拽状态完全无法持续
  • place_meeting()仅返回布尔值表示是否碰撞,无法通过other直接获取碰撞的obj_iron实例,需使用instance_place()返回碰撞实例的ID
  • 重置逻辑存在漏洞:当前仅当未碰撞到obj_iron时才会检测左键松开重置,拖拽过程中松开左键无法正常清空全局变量
  • 图片缩放逻辑每帧重复执行无意义,可迁移到Create事件减少冗余运算

修复步骤

  1. 先将以下代码迁移到obj_cursor的Create事件中:
// 设置光标缩放,仅需初始化时执行一次
image_xscale = 0.1
image_yscale = 0.1
// 初始化全局拖拽变量
global.picked_up_iron = 0
  1. 将obj_cursor的Step事件代码替换为以下内容:
// 光标跟随鼠标移动
x = mouse_x
y = mouse_y

// 检测当前碰撞到的obj_iron实例
var collide_iron = instance_place(x, y, obj_iron)

// 检测左键按下
if mouse_check_button(mb_left)
{
    // 已有拖拽实例时直接移动实例
    if global.picked_up_iron != 0
    {
        global.picked_up_iron.x = x - global.picked_up_iron.sprite_width / 2
        global.picked_up_iron.y = y - global.picked_up_iron.sprite_height / 2
    }
    // 无拖拽实例且碰撞到obj_iron时,记录拖拽实例
    else if collide_iron != noone
    {
        global.picked_up_iron = collide_iron
        global.picked_up_iron.x = x - global.picked_up_iron.sprite_width / 2
        global.picked_up_iron.y = y - global.picked_up_iron.sprite_height / 2
    }
}
// 左键松开时重置拖拽状态
else
{
    global.picked_up_iron = 0
}

验证注意事项

  • 确认obj_cursor的碰撞盒配置正确,不可见对象也需要开启碰撞属性才能触发碰撞检测
  • 确认obj_iron没有其他事件代码覆盖坐标修改逻辑

内容的提问来源于stack exchange,提问作者ProfoundMaker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:01