查看: 2280|回复: 8

[已经解决] 请问:注释掉几行代码后显示错误

[复制链接]
梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
发表于 2021-2-20 15:35:07 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
注释掉Scene_Map中的几行代码
#      unless $game_temp.player_transferring
#        break
#      end
后,为什么报错,显示没有 地图MAP00?为什么 场所移动要套用在Loop do结构中?
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2021-2-20 23:49:10 | 显示全部楼层
本帖最后由 KB.Driver 于 2021-2-21 11:14 编辑

XP的事件是直接开新线程(Thread),这里应该是为了同步动作而等待吧。

点评

XP事件是Proc,不是Thread。  发表于 2021-2-21 19:15
咦,搜了一下XP默认脚本确实没有。应该是跟以前的某个插件脚本记混了,我当时好像看到公共事件是用Thread.new{} 包裹来执行的,但是不记得来源了。  发表于 2021-2-21 11:14
XP没有使用线程技术……  发表于 2021-2-21 00:18
用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
 楼主| 发表于 2021-2-21 15:40:30 | 显示全部楼层
谢谢两位了,但是还没解答我的疑惑!请高人解答。
回复

使用道具 举报

梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2021-2-21 16:26:47 | 显示全部楼层
我懒得打开XP来看,但是你也没直接给出错误内容,所以我只好用编程逻辑普遍拆测。
高几率你注释掉的代码之后的代码只有在$game_temp.player_transferring的情况下可以正常运行,你注释掉后导致代码缺乏了状况判定而在不应该执行的情况执行。
rmxp大多数的loop do结构都是为了画面更新运算,因为哪怕画面没有动作,可是其实背后画面也就在刷新。
回复

使用道具 举报

双子人

梦石
0
星屑
3205
在线时间
3619 小时
注册时间
2009-4-4
回帖
3901

开拓者

发表于 2021-2-21 19:24:28 | 显示全部楼层
本帖最后由 hys111111 于 2021-2-21 19:25 编辑

这里不应该注释掉的
场所移动事件需要$game_temp.player_transferring == true,但是只有$game_temp.player_transferring == false的时候会中断循环。
你注释掉的这里的下一行是transfer_player,也是执行场所移动事件,注释掉了之后就会一直执行场所移动这个动作。
因为通常情况下都是到这里跳出循环,除非在事件调用了场所移动才会进行下一步。

如果你没有在$scene = Scene_Map.new之前做任何场所移动的动作,$game_temp.player_new_map_id就是默认值0
接下来transfer_player下面的$game_map.setup($game_temp.player_new_map_id)里面,又会调用Game_Map下的@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
这个时候,由于$game_temp.player_new_map_id的值是0,就找不到Map000.rxdata这个文件。

然后话说回来,就算找得到这个文件,你可能会因为不停地执行场所移动这个动作而卡住。

点评

谢谢解答  发表于 2021-2-21 22:50

评分

参与人数 1星屑 +100 赞 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部