Project1

标题: 如何处理图片的色相 [打印本页]

作者: 康姆图帕帕    时间: 2018-6-15 01:31
标题: 如何处理图片的色相
萌新想用变量来表达图片色相,使得角色立绘能够自定义。不过目前有两个问题:
showPicture脚本没有表示色相的参数,只能用$Game_Picture.prototype.initTone,问题是这个脚本像图片旋转一样需要持续时间,不能即时表达;
显示出来的图片不只修改有色调的部分,更像是蒙了一层颜色滤镜,导致图片的黑色部分也跟着一块变色了...
有什么解决方法吗?

作者: soulsaga    时间: 2018-6-15 13:08
本帖最后由 soulsaga 于 2018-6-15 14:06 编辑

你这个好像是更改图像的色调而不是色相..
下面这段代码是事件脚本读取图像和色相后显示图像

JAVASCRIPT 代码复制
  1. var bitmap = ImageManager.loadBitmap("img/pictures/","Actor_1",100);
  2. var sprite = new Sprite(bitmap);
  3. SceneManager._scene.addChild(sprite);

FMBS4.png (727.4 KB, 下载次数: 27)

FMBS4.png

作者: 康姆图帕帕    时间: 2018-6-15 19:55
soulsaga 发表于 2018-6-15 13:08
你这个好像是更改图像的色调而不是色相..
下面这段代码是事件脚本读取图像和色相后显示图像

多谢指教!
不过这样显示出的图片不能定义编号和位置等等是吗?
作者: soulsaga    时间: 2018-6-15 20:20
康姆图帕帕 发表于 2018-6-15 19:55
多谢指教!
不过这样显示出的图片不能定义编号和位置等等是吗?

不需要编号..和其他图片没有冲突..
位置修改
sprite.x
sprite.y
作者: 康姆图帕帕    时间: 2018-6-15 20:52
soulsaga 发表于 2018-6-15 20:20
不需要编号..和其他图片没有冲突..
位置修改
sprite.x

有效果了,不过由于目前我的工程量的原因...如果想在showPicture的参数里加一个hue,大致要从哪里入手呢?
作者: soulsaga    时间: 2018-6-16 12:39
本帖最后由 soulsaga 于 2018-6-16 13:07 编辑
康姆图帕帕 发表于 2018-6-15 20:52
有效果了,不过由于目前我的工程量的原因...如果想在showPicture的参数里加一个hue,大致要从哪里入手呢 ...


要改的地方挺多...
默认脚本..不知你有没动过..
作者: 康姆图帕帕    时间: 2018-6-16 13:08
本帖最后由 康姆图帕帕 于 2018-6-16 13:15 编辑
soulsaga 发表于 2018-6-16 12:39
rpg_managers.js脚本里
搜return this.loadBitmap('img/pictures/', filename, hue, true)
不过我不会给s ...


manager里的 ImageManager.loadNormalBitmap 中 rotateHue(hue) 是渲染图片色相的...
core里 Bitmap.prototype.rotateHue 应该是给它下定义的...
然而我怎么都不能在objects里的 showPicture 中调用它们
折腾到天亮,然而只弄明白了这点东西...

如果只能用sprite显示图片,那对于我这个几乎完全由图片构成的工程来说就趋于灾难了...
作者: soulsaga    时间: 2018-6-16 13:23
康姆图帕帕 发表于 2018-6-16 13:08
manager里的 ImageManager.loadNormalBitmap 中 rotateHue(hue) 是渲染图片色相的...
core里 Bitmap.prot ...

你可以上传一下你的默认脚本吗..我试试修改..
作者: 康姆图帕帕    时间: 2018-6-16 13:38
本帖最后由 康姆图帕帕 于 2018-6-16 13:40 编辑

非常感谢
这些是我动过的脚本,实际修改的只有objects,我加了几条hue的条目,可能问题就是如何调用其他脚本的参数了...
showPicture里有一条this._x = x+$gameVariables.value(60);是为其他设计添加的不用在意

$gameScreen.showPicture("1","图片",0,0,0,100,100,255,0)
$gameScreen.showPicture("编号",文件名,原点,x,y,x放大率,y放大率,透明度,合成方式)
是这个吗

js.zip

113.55 KB, 下载次数: 47


作者: soulsaga    时间: 2018-6-16 14:10
本帖最后由 soulsaga 于 2018-6-16 14:16 编辑

换了你这个脚本会报错啊..没法测试..
随便给个你改过的默认工程研究下..是不是我MV版本旧了?
其实你也改得差不多了..
rpg_sprites.js脚本里搜
this.bitmap = ImageManager.loadPicture(this._pictureName);
往后加this._hue试试..
作者: 康姆图帕帕    时间: 2018-6-16 15:14
soulsaga 发表于 2018-6-16 14:10
换了你这个脚本会报错啊..没法测试..
随便给个你改过的默认工程研究下..是不是我MV版本旧了?
其实你也改得 ...

我的是MV1.5.1,升过一次1.6结果崩了
this._hue加了无效,可能是因为sprites里给this.hue赋值的是picture.hue()。
而色相的计算是在core里的Bitmap.prototype.rotateHue下面进行的,manager里图片也是调用的bitmap.rotateHue(hue),和Game_Picture一点关系也没有,而且在objects里调用bitmap相关会出错....
我觉得就是objects根本不认识hue这个变量

Project3.zip

1.4 MB, 下载次数: 34


作者: soulsaga    时间: 2018-6-16 17:52
本帖最后由 soulsaga 于 2018-6-16 18:09 编辑

Sprite_Picture.prototype.updateBitmap = function() {
    var picture = this.picture();
    if (picture) {
        var pictureName = picture.name();
        if (this._pictureName !== pictureName) {
            this._pictureName = pictureName;
            this._hue = picture.hue();
            this.loadBitmap();
        }
        this.visible = true;
    } else {
        this._pictureName = '';
        this.bitmap = null;
        this.visible = false;
    }
};

研究出来了..还有rpg_sprites.js这里要改..
亲测成功..
这样色相值就可以传到读取图片那了..
作者: 康姆图帕帕    时间: 2018-6-17 11:26
soulsaga 发表于 2018-6-16 17:52
Sprite_Picture.prototype.updateBitmap = function() {
    var picture = this.picture();
    if (pictu ...

我又来劳烦了,首先对之前的帮助再次表达感谢
为了让图片在色相变化时能即时更新,我又加了一段判断

Sprite_Picture.prototype.updateBitmap = function() {
    var picture = this.picture();
    if (picture) {
        var pictureName = picture.name();
        if (this._pictureName !== pictureName) {
            this._pictureName = pictureName;
            this._hue = picture.hue();
            this.loadBitmap();
        }
        if (this._pictureName == pictureName) {
            this._hue = picture.hue();
            this.loadBitmap();
        }
        this.visible = true;

    } else {
        this._pictureName = '';
        this.bitmap = null;
        this.visible = false;
    }
};
虽然达到了目的,不过我发现色相的变化似乎是必须要进行一次loadBitmap()的,导致的问题就是整个图片在更新色相时会闪烁,不像更新位置、透明度时那么流畅。
而把this._hue = picture.hue() 放在其他update图片参数下面似乎是无效的,因为没有loadBitmap()...?
所以在MV中,色相更新必须要重加载图片?这可能是一个无法避免的问题?
不过这个问题不算大,我大概可以掩饰过去XDDD
作者: soulsaga    时间: 2018-6-17 12:01
康姆图帕帕 发表于 2018-6-17 11:26
我又来劳烦了,首先对之前的帮助再次表达感谢
为了让图片在色相变化时能即时更新,我又加了一段 ...

除了读取还有其他方法改变色相么..
作者: 康姆图帕帕    时间: 2018-6-17 12:13
soulsaga 发表于 2018-6-17 12:01
除了读取还有其他方法改变色相么..

也是,那些即时更改色相的图片可能只是加了滤镜一类的吧




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