Project1
标题: Bitmap加载后_isLoading为true无法绘制 [打印本页]
作者: gonglinyuan 时间: 2016-4-8 16:37
标题: Bitmap加载后_isLoading为true无法绘制
var bitmap = ImageManager.loadEnemy("Bat", 0);
this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);
var bitmap = ImageManager.loadEnemy("Bat", 0);
this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);
本来我想通过这种方式描绘一个敌人的战斗图,结果什么也没有绘制。
于是我加了一行调试语句:
var bitmap = ImageManager.loadEnemy("Bat", 0);
console.log(bitmap._isLoading, bitmap.width, bitmap.height);
this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);
var bitmap = ImageManager.loadEnemy("Bat", 0);
console.log(bitmap._isLoading, bitmap.width, bitmap.height);
this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);
结果控制台的输出是
实验一:如果我在游戏启动前现在控制台里执行
ImageManager.loadEnemy("Bat", 0);
ImageManager.loadEnemy("Bat", 0);
这样图片就能正确绘制了。
实验二:如果用ImageManager.loadSystem加载一个小图标,就不会出现这样的问题。
实验三:在这个窗口的update函数里不断调用这些语句,而不是只在创建时调用一次,也能解决这个问题。根据控制台输出,只有窗口创建时那一次输出是true 0 0,后面每一次都是正常的false 48 48。
我怀疑是MV引擎是异步加载位图,而不是等待位图加载再往下执行。求大神解释。另外,不知道有没有什么好的解决方案。。
作者: wbsy8241 时间: 2016-4-8 18:27
我今天刚好遇到这个问题
你要用- 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 |