设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3237|回复: 4

[已经解决] Bitmap加载后_isLoading为true无法绘制

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
发表于 2016-4-8 16:37:14 | 显示全部楼层 |阅读模式

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

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

x
JAVASCRIPT 代码复制
  1. var bitmap = ImageManager.loadEnemy("Bat", 0);
  2. this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);


本来我想通过这种方式描绘一个敌人的战斗图,结果什么也没有绘制。

于是我加了一行调试语句:
JAVASCRIPT 代码复制
  1. var bitmap = ImageManager.loadEnemy("Bat", 0);
  2. console.log(bitmap._isLoading, bitmap.width, bitmap.height);
  3. this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);


结果控制台的输出是
JAVASCRIPT 代码复制
  1. true 0 0


实验一:如果我在游戏启动前现在控制台里执行

JAVASCRIPT 代码复制
  1. ImageManager.loadEnemy("Bat", 0);


这样图片就能正确绘制了。

实验二:如果用ImageManager.loadSystem加载一个小图标,就不会出现这样的问题。


实验三:在这个窗口的update函数里不断调用这些语句,而不是只在创建时调用一次,也能解决这个问题。根据控制台输出,只有窗口创建时那一次输出是true 0 0,后面每一次都是正常的false 48 48。

我怀疑是MV引擎是异步加载位图,而不是等待位图加载再往下执行。求大神解释。另外,不知道有没有什么好的解决方案。。
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
发表于 2016-4-8 18:27:30 | 显示全部楼层
我今天刚好遇到这个问题
你要用
  1. console.log(bitmap.isReady(), bitmap.width, bitmap.height);
复制代码
这样就是false 0 0

isLoading 是正在读取中的意思


这个就是异步加载的 真恶心
我是放到updata里的 用.isReady() 判断是否读取完成

其他方法不明
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
385 小时
注册时间
2007-7-27
帖子
4106

开拓者

发表于 2016-4-8 19:45:13 | 显示全部楼层
用addLoadListener添加回调函数绘制

点评

这个版块是不是没有【认可答案】功能啊,只能【标记为已解答】,所以我只好自己评分了。。  发表于 2016-4-8 20:54

评分

参与人数 2星屑 +40 梦石 +1 收起 理由
余烬之中 + 1 认可答案
gonglinyuan + 40 认可答案

查看全部评分

吸吸
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2207
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

发表于 2016-4-8 20:11:08 | 显示全部楼层
默认脚本的解决方式和你实验二差不多。在场景开始跑之前确认所有位图已经加载完毕。

如果不担心画面上本来一片空白,在某一时刻突然绘制出东西的话,3楼的方法也是可行的

评分

参与人数 1星屑 +5 收起 理由
gonglinyuan + 5 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
 楼主| 发表于 2016-4-8 20:52:52 | 显示全部楼层
@trentswd 亲测可行,这应该就是正确用法了,感谢大神一语中的的解答!
@taroxd 我后来自己的实现是【如果refresh(绘制所有图形)时发现有图像没有被描绘,则下一次update时执行一次refresh】,不过这样一来需要重载的函数明显增多,代码就不美观了。我觉得还是3L的方法更好一点,至少代码比较简洁,只要加一句 bitmap.addLoadListener(this.refresh.bind(this)) 就行了
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-19 03:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表