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

Project1

 找回密码
 注册会员
搜索
查看: 3855|回复: 9
打印 上一主题 下一主题

[已经解决] blt读取图片有啥特殊要求么

[复制链接]

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
跳转到指定楼层
1
发表于 2015-11-15 15:36:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
打算用blt读取图片做图形菜单,试了下莫名其妙有些图片能显示有些却是空的
  1. Window_Base.prototype.drawButton = function(faceName, x, y, width, height) {
  2.     var bitmap = ImageManager.loadSystem(faceName);
  3.     this.contents.blt(bitmap, 0, 0, width, height, x, y);
  4. };


  5. Window_ActorCommand.prototype.drawItem = function(index)
  6. {
  7.         this.drawIcon(12, 10,10,100,32); // for testing purpose
  8.         var bitmap = 'Balloon';
  9.         this.drawButton(bitmap, 10, 10, 300, 300);  // test loading image
  10. };
复制代码
扩大了战斗菜单选项框,然后测试drawIcon毫无问题
然后如法炮制了一个drawButton打算画图片,但是很莫名读了几个system文件夹的图 有的可以读有的不显示,没有报错的
是有啥限制还是图片必须特定规格的?同样的函数啊换了图片就不行了。。。

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

2
发表于 2015-11-15 15:45:18 | 只看该作者
blt 要求源图片加载完毕。

MV 中读取图片是异步操作,返回的图片不一定是加载完成的。可以用 addLoadListener 来侦听加载完成。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
3
 楼主| 发表于 2015-11-15 15:58:14 | 只看该作者
发现问题了
这个里面限了文件读取。。。。不知掉为啥之前下的一个动画标题菜单插件没有改scene_root也能读。。。
  1. Scene_Boot.prototype.loadSystemImages = function() {
  2.     ImageManager.loadSystem('Window');
  3.     ImageManager.loadSystem('IconSet');
  4.     ImageManager.loadSystem('Balloon');
  5.     ImageManager.loadSystem('Shadow1');
  6.     ImageManager.loadSystem('Shadow2');
  7.     ImageManager.loadSystem('Damage');
  8.     ImageManager.loadSystem('States');
  9.     ImageManager.loadSystem('Weapons1');
  10.     ImageManager.loadSystem('Weapons2');
  11.     ImageManager.loadSystem('Weapons3');
  12.     ImageManager.loadSystem('ButtonSet');
  13. };
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

4
发表于 2015-11-15 16:06:48 | 只看该作者
doranikofu 发表于 2015-11-15 15:58
发现问题了
这个里面限了文件读取。。。。不知掉为啥之前下的一个动画标题菜单插件没有改scene_root也能读 ...

这里是预先缓存比较重要的图片文件。删掉这些代码其实问题也不会太大。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
5
 楼主| 发表于 2015-11-16 01:50:21 | 只看该作者
taroxd 发表于 2015-11-15 16:06
这里是预先缓存比较重要的图片文件。删掉这些代码其实问题也不会太大。 ...

发现loadPicture也有同样的问题啊
给物品读大图标,第一次打开看不到图 第二次就可以了,应该就是这个读取不同步的问题
菜单在Scene_boot预读倒是无所谓,物品图标就不行了
请问下具体要怎么用addLoadListener?不太熟悉js基本就是这里挖一点别人的脚本那一改一下
是要在函数里面写一个等待的功能么?
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

6
发表于 2015-11-16 06:50:16 | 只看该作者
doranikofu 发表于 2015-11-16 01:50
发现loadPicture也有同样的问题啊
给物品读大图标,第一次打开看不到图 第二次就可以了,应该就是这个读 ...


bitmap.addLoadListener(func)

在图片载入完成时执行 func 函数。如果图片已经载入,则立刻执行
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
7
 楼主| 发表于 2015-11-16 14:54:53 | 只看该作者
taroxd 发表于 2015-11-16 06:50
bitmap.addLoadListener(func)

在图片载入完成时执行 func 函数。如果图片已经载入,则立刻执行 ...

试着这样貌似不行
bitmap.addLoadListener(this.contents.blt(bitmap, sx, sy, pw, ph, x, y, 144, 144));
不是太懂深层的东西,基本就是要读取完毕之后再draw
不知道用这个能不能简单的实现
看英文论坛也有人遇到这种问题 最后是决定提前把图片读一遍
要是有比较泛用的方法就好了
见过几个插件似乎都没有碰到这种问题,不知道具体是个啥情况
自定菜单人物图的脚本直接在Window_MenuStatus.prototype.drawItemImage里面loadPicture然后blt就读出来了。。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

8
发表于 2015-11-16 15:18:12 | 只看该作者
doranikofu 发表于 2015-11-16 14:54
试着这样貌似不行
bitmap.addLoadListener(this.contents.blt(bitmap, sx, sy, pw, ph, x, y, 144, 144)) ...


参数应该是一个函数,不是 blt 的返回值。

参考:https://github.com/taroxd/RPGMV-Taiko/blob/master/js/view.js (在页面中搜索 addLoadListener)

评分

参与人数 1星屑 +66 收起 理由
余烬之中 + 66 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

开拓者

9
发表于 2015-11-16 21:47:37 | 只看该作者
这样试试看
  1. bitmap.addLoadListener(function(){
  2. this.contents.blt(bitmap, sx, sy, pw, ph, x, y, 144, 144);
  3. });
复制代码
我对js的闭包不是很了解,错了不管

点评

注意 this 的值... js 坑之一  发表于 2015-11-17 15:25

评分

参与人数 1星屑 +66 收起 理由
余烬之中 + 66 认可答案

查看全部评分

吸吸
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
10
 楼主| 发表于 2015-11-17 14:28:20 | 只看该作者
本帖最后由 doranikofu 于 2015-11-17 14:33 编辑
trentswd 发表于 2015-11-16 21:47
这样试试看我对js的闭包不是很了解,错了不管

开始出了几次错误
Uncaught TypeError: Cannot read property 'blt" of undefined

参考了下8L的 试了下面的也是同样的错误
    bitmap.addLoadListener(function() {
        this.content.blt(bitmap, sx, sy, pw, ph, x, y, 144, 144);
    }.bind(this));

然后后来试了几次突然好了 。。。不知道哪个地方写抽了可能
感谢菊苣帮助

点评

有错误,建议打开F8看调试信息  发表于 2015-11-17 15:25
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 15:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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