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事件减少冗余运算
修复步骤
- 先将以下代码迁移到
obj_cursor的Create事件中:
// 设置光标缩放,仅需初始化时执行一次 image_xscale = 0.1 image_yscale = 0.1 // 初始化全局拖拽变量 global.picked_up_iron = 0
- 将
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
相关产品推荐
相关产品推荐

