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

Project1

 找回密码
 注册会员
搜索

关于MZ Hue颜色的问题

查看数: 4061 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-6-7 12:50

正文摘要:

在MZ里面loadSvActor取消了hue ImageManager.loadSvActor = function(filename) {     return this.loadBitmap("img/sv_actors/", filename); }; 在MV里面loadSvActor是有hue改变颜色 ImageManager.loadS ...

回复

MH-Pride 发表于 2021-6-11 23:13:34
q3226257 发表于 2021-6-11 10:05
你抄代码要抄完啊,不知道就点进去看一下呗。。。
参数bitmap其实也没必要,你本来就是用bitmap.rotateHu ...

谢谢了我在研究下
MH-Pride 发表于 2021-6-11 23:09:46
lisliz 发表于 2021-6-11 09:23
mz的核心脚本里有个ColorFilter,用来实现hue的,这东西比mv的要高效许多,不建议降级把mv的搬过来。不过我 ...

我也想用hue 但是 blt (source, sx, sy, sw, sh, dx, dy, dw, dh) 不知道怎么用colorfilter
所以q3226257提出的改变bitmap的颜色是能行的
q3226257 发表于 2021-6-11 10:05:26
MH-Pride 发表于 2021-6-11 00:44
Bitmap.prototype.rotateHue = function(offset,bitmap) {
    function rgbToHsl(r, g, b) {
        va ...

你抄代码要抄完啊,不知道就点进去看一下呗。。。
参数bitmap其实也没必要,你本来就是用bitmap.rotateHue,this就是指代bitmap了
滤镜是pixi的功能,在显示的时候会有一层滤镜,
mv的实现其实是修改了图片信息,渲染的时候就达到改变颜色,

点评

Bitmap.prototype.checkDirty = function() { if (this._dirty) { this._baseTexture.update();//就是调用了这个 this._dirty = false; } };  发表于 2021-6-11 10:08
lisliz 发表于 2021-6-11 09:23:34
mz的核心脚本里有个ColorFilter,用来实现hue的,这东西比mv的要高效许多,不建议降级把mv的搬过来。不过我有点奇怪pixi已经自带了一个ColorMatrixFilter,已经完全实现了那个ColorFilter的功能了,再不济也可以直接改矩阵,为啥还要自己实现一个?

点评

只是封装了一下  发表于 2021-6-11 10:00
q3226257 发表于 2021-6-9 10:18:39
  1. Bitmap.prototype.rotateHue = function(offset) {
  2.     function rgbToHsl(r, g, b) {
  3.         var cmin = Math.min(r, g, b);
  4.         var cmax = Math.max(r, g, b);
  5.         var h = 0;
  6.         var s = 0;
  7.         var l = (cmin + cmax) / 2;
  8.         var delta = cmax - cmin;

  9.         if (delta > 0) {
  10.             if (r === cmax) {
  11.                 h = 60 * (((g - b) / delta + 6) % 6);
  12.             } else if (g === cmax) {
  13.                 h = 60 * ((b - r) / delta + 2);
  14.             } else {
  15.                 h = 60 * ((r - g) / delta + 4);
  16.             }
  17.             s = delta / (255 - Math.abs(2 * l - 255));
  18.         }
  19.         return [h, s, l];
  20.     }

  21.     function hslToRgb(h, s, l) {
  22.         var c = (255 - Math.abs(2 * l - 255)) * s;
  23.         var x = c * (1 - Math.abs((h / 60) % 2 - 1));
  24.         var m = l - c / 2;
  25.         var cm = c + m;
  26.         var xm = x + m;

  27.         if (h < 60) {
  28.             return [cm, xm, m];
  29.         } else if (h < 120) {
  30.             return [xm, cm, m];
  31.         } else if (h < 180) {
  32.             return [m, cm, xm];
  33.         } else if (h < 240) {
  34.             return [m, xm, cm];
  35.         } else if (h < 300) {
  36.             return [xm, m, cm];
  37.         } else {
  38.             return [cm, m, xm];
  39.         }
  40.     }

  41.     if (offset && this.width > 0 && this.height > 0) {
  42.         offset = ((offset % 360) + 360) % 360;
  43.         var context = this._context;
  44.         var imageData = context.getImageData(0, 0, this.width, this.height);
  45.         var pixels = imageData.data;
  46.         for (var i = 0; i < pixels.length; i += 4) {
  47.             var hsl = rgbToHsl(pixels[i + 0], pixels[i + 1], pixels[i + 2]);
  48.             var h = (hsl[0] + offset) % 360;
  49.             var s = hsl[1];
  50.             var l = hsl[2];
  51.             var rgb = hslToRgb(h, s, l);
  52.             pixels[i + 0] = rgb[0];
  53.             pixels[i + 1] = rgb[1];
  54.             pixels[i + 2] = rgb[2];
  55.         }
  56.         context.putImageData(imageData, 0, 0);
  57.         this._setDirty();
  58.     }
  59. };
复制代码



很明显,mv的实现是更改了图像的数据来实现hue的,
但是mz是通过滤镜实现的,所以你要改成mv那样,需要把更改图像数据这部分代码复制过来的
q3226257 发表于 2021-6-8 09:48:56
复制mv的到mz就好了~~~~~~~
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-7-18 13:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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