Game Maker修改Windy Woods模板:添加启动页触发报错求助
我是游戏引擎和游戏创作纯新手,正在边学边推进项目,当前基于Windy Woods模板开发功能。想创建一个启动页并设为游戏启动的首个页面,结果出现报错且找不到原因,报错信息如下:
ERROR in action number 1 of Step Event1 for object obj_character_parent: Unable to find instance for object index 24 at gml_Script_check_collision (line 17) - var _left_top = tilemap_get_at_pixel(obj_game_manager.collision_tilemap, bbox_left + _move_x, bbox_top + _move_y);
gml_Script_check_collision (line 17)
gml_Object_obj_character_parent_Step_1 (line 6) - grounded = check_collision(0, 1);

问题原因
报错核心是obj_character_parent的Step事件调用check_collision脚本时,obj_game_manager实例还未创建(或不存在),导致脚本访问obj_game_manager.collision_tilemap失败。因为你把启动页设为首个页面,启动场景里大概率没有obj_game_manager,但角色父对象却在这个场景里运行Step事件。
解决方法
- 清理启动页场景:如果启动页不需要角色,直接删掉启动场景里的
obj_character_parent实例,只保留启动页相关的UI、按钮等对象。 - 给脚本加判断:如果启动页必须保留角色,打开
check_collision脚本,在访问obj_game_manager前添加实例存在判断,避免报错:
// 在脚本开头添加判断 if (!instance_exists(obj_game_manager)) { return false; // 按逻辑返回合适值,比如角色未接地 } // 原脚本代码 var _left_top = tilemap_get_at_pixel(obj_game_manager.collision_tilemap, bbox_left + _move_x, bbox_top + _move_y); // ... 后续原有代码
- 确认场景切换逻辑:启动页只负责引导,点击“开始”后再切换到包含
obj_game_manager和角色的主游戏场景,确保主场景内的对象按正确顺序创建。
内容的提问来源于stack exchange,提问作者user22858659

