Project1

标题: 第一次打开窗口无法显示图片 [打印本页]

作者: 海蓝史莱姆    时间: 2017-6-21 20:38
标题: 第一次打开窗口无法显示图片
之前自己写了一个插件给游戏新增窗口,然后窗口里用到了drawActorFace和drawIcon,但第一次运行游戏打开这个窗口之后角色的头像并没有显示,必须让窗口刷新一次才能正常显示头像(另外图标的显示没有问题)。我翻自带代码的时候发现了ImageManager.reserveFace这个函数,把它扔进那个窗口的initialize里就能避免此问题,但我个人并不明白其中的原理。

而我在写一个二级菜单类型的插件时又第二次遇到了这个问题,菜单附带的窗口里用到了contents.blt,绘制的是数据库中的敌人图像(有缩放),第一次打开菜单并不显示图片,第二次打开菜单才显示,关键问题在于:这回我再使用ImageManager.reserveEnemy就不管用了,即使我是像自带代码里的那样用forEach循环遍历将要用到的所有敌人图像。

我一直在通过类比RMMV自带的js代码与RMXP自带脚本的区别来学习js,但我在用RMXP写窗口时从来没有遇到过这种情况,所以个人实在是毫无头绪,不知道如何解决。

注:上文提到的所有“第一次”与“第二次”均是相对于运行游戏之后而言的,只要不关游戏,读档和返回标题画面开始新游戏皆无法重置这个“第一次”。
作者: 在野月光    时间: 2017-6-22 21:11
原因目前只能相信是图片从外部读入未完成的时候,窗口同时进行了加载。
按ESC打开默认菜单的时候,如果在Bitmap.load里面输出console.log(bitmap),
可以看到这个bitmap出现了2次。至于个中因由、个人是没深究了,
你有想法的话,可以F8选Sources搜索bitmap._image.src = url 下断,自己单步去跟。
如果是自己创建的窗口加载图片,会看到上述的bitmap只输出了1次。
与此同时,在blt的function里面关于图片的宽高获取是失败的,
所以那个if 条件不会成立,blt 也就失败了。
至于打开过1次任意窗口之后,再打开就能显示,那是因为第2次打开时,图片已读入完毕了。
你可以F8依次点开: Resources - Frames - (index.html) - Images 会看到加载图片已在里面;
图片在你窗口创建之前,就早已在这个Images里面的话,你blt是没问题的。
一般来说,MV的窗口都是在scene里完成加载的,每个scene 都附有 create 和 start ,
你在create 读入图片,在start 处理窗口加载就是了。
作者: 海蓝史莱姆    时间: 2017-6-23 16:25
在野月光 发表于 2017-6-22 21:11
原因目前只能相信是图片从外部读入未完成的时候,窗口同时进行了加载。
按ESC打开默认菜单的时候,如果在Bi ...

非常感谢解答,我找到问题所在了,看来RMMV还是比较复杂的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1