Project1

标题: Bitmap加载后_isLoading为true无法绘制 [打印本页]

作者: gonglinyuan    时间: 2016-4-8 16:37
标题: Bitmap加载后_isLoading为true无法绘制
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引擎是异步加载位图,而不是等待位图加载再往下执行。求大神解释。另外,不知道有没有什么好的解决方案。。
作者: wbsy8241    时间: 2016-4-8 18:27
我今天刚好遇到这个问题
你要用
  1. console.log(bitmap.isReady(), bitmap.width, bitmap.height);
复制代码
这样就是false 0 0

isLoading 是正在读取中的意思


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

其他方法不明
作者: trentswd    时间: 2016-4-8 19:45
用addLoadListener添加回调函数绘制
作者: taroxd    时间: 2016-4-8 20:11
默认脚本的解决方式和你实验二差不多。在场景开始跑之前确认所有位图已经加载完毕。

如果不担心画面上本来一片空白,在某一时刻突然绘制出东西的话,3楼的方法也是可行的
作者: gonglinyuan    时间: 2016-4-8 20:52
@trentswd 亲测可行,这应该就是正确用法了,感谢大神一语中的的解答!
@taroxd 我后来自己的实现是【如果refresh(绘制所有图形)时发现有图像没有被描绘,则下一次update时执行一次refresh】,不过这样一来需要重载的函数明显增多,代码就不美观了。我觉得还是3L的方法更好一点,至少代码比较简洁,只要加一句 bitmap.addLoadListener(this.refresh.bind(this)) 就行了




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