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

Project1

 找回密码
 注册会员
搜索
查看: 1782|回复: 11

[已经过期] 请教下有没有菜单选择框反色显示的脚本

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4436
在线时间
378 小时
注册时间
2012-11-8
帖子
272
发表于 2022-3-26 10:53:50 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 qq634488405 于 2022-3-26 10:57 编辑

自己改把原来的Window_Command里的update_cursor_rect方法想实现选择框反色显示,采用的方法为获取选择框内的颜色,记录文字颜色的坐标,然后填充选择框,修改坐标位置颜色为背景色,修改后的脚本如下
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 更新光标矩形
  3.   #--------------------------------------------------------------------------
  4.   def update_cursor_rect
  5.     # 光标位置不满 0 的情况下
  6.     if @index < 0
  7.       self.cursor_rect.empty
  8.       return
  9.     end
  10.     # 获取当前的行
  11.     row = @index / @column_max
  12.     # 当前行被显示开头行前面的情况下
  13.     if row < self.top_row
  14.       # 从当前行向开头行滚动
  15.       self.top_row = row
  16.     end
  17.     # 当前行被显示末尾行之后的情况下
  18.     if row > self.top_row + (self.page_row_max - 1)
  19.       # 从当前行向末尾滚动
  20.       self.top_row = row - (self.page_row_max - 1)
  21.     end
  22.     # 计算光标的宽
  23.     cursor_width = @width_txt
  24.     # 计算光标坐标
  25.     x = @index % @column_max * cursor_width
  26.     y = @index / @column_max * 32 - self.oy
  27.     # 设置光标位置
  28.     self.cursor_rect.set(x, y, @width_txt, 32)
  29.     x_y = []
  30.     # 获取文字颜色坐标
  31.     for i in x..(x + @width_txt - 1)
  32.       for j in y..y+31
  33.         x_y.push([i,j]) if self.contents.get_pixel(i,j) == normal_color
  34.       end
  35.     end
  36.     # 填充选择框
  37.     self.contents.fill_rect(self.cursor_rect, normal_color)
  38.     # 文字位置设置为背景色
  39.     x_y.each do |i|
  40.       self.contents.set_pixel(i[0],i[1],back_color)
  41.     end
  42.   end
  43. end

其中normal_color为黑色,back_color为菜单背景色,菜单背景使用的纯色
实际效果在反色显示的时候文字部分不完整,浏览器不支持flash上传不了图片,截图来看字体边缘的点颜色与normal_color有点区别,求大佬指导,或者有无其他实现方法,谢谢

Lv3.寻梦者

梦石
0
星屑
4436
在线时间
378 小时
注册时间
2012-11-8
帖子
272
 楼主| 发表于 2022-3-26 12:41:15 | 显示全部楼层
另外也试过,选取不是背景色的坐标
  1.     # 获取文字颜色坐标
  2.     for i in x..(x + @width_txt - 1)
  3.       for j in y..y+31
  4.         x_y.push([i,j]) if self.contents.get_pixel(i,j) != back_color
  5.       end
  6.     end
复制代码

结果选择框内全部变成背景色。。。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9587
在线时间
563 小时
注册时间
2017-9-28
帖子
208
发表于 2022-3-26 14:42:36 | 显示全部楼层
有没有可能,在 refresh 里面同时生成一张反色的 contents,然后把选择框改成显示对应区域的反色精灵。

因为 contents 一般不包含背景图,所以反色 contents 其实需要处理的是叠加上背景图的那张图。

至于反色算法,我正好有一个脚本:https://zhuanlan.zhihu.com/p/30123130
喵喵喵
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7926
在线时间
1181 小时
注册时间
2007-7-29
帖子
2055
发表于 2022-3-27 01:43:45 | 显示全部楼层
你不上一张示意图真的不好理解你最终想要的效果。还有 @width_txt 这变量本身不存在,应该是你自己添加的,把你的脚本单独加进 window_command 不出问题才怪
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4436
在线时间
378 小时
注册时间
2012-11-8
帖子
272
 楼主| 发表于 2022-3-29 17:33:54 | 显示全部楼层
enghao_lim 发表于 2022-3-27 01:43
你不上一张示意图真的不好理解你最终想要的效果。还有 @width_txt 这变量本身不存在,应该是你自己添加的, ...

脚本没出错的,原脚本没有的变量都有定义,主要是实现的方法,原因现在大致清楚一半,因为文字边缘平滑变化的缘故不是纯色,所以使用get_pixel会遗漏部分点位,但是反过来判断出现的现象就有点搞不明白

点评

这里潜水的大佬非常的多,没人回复多数是问题不清楚,大佬毕竟是大佬,还不至花时间于去盲猜你的提问,建议你把资料给足吧。  发表于 2022-3-29 17:58
我的意思是你就放出一段你自己改过的脚本,比如 @width_txt 这玩意儿储存的是什么数值谁知道如何帮你呢?  发表于 2022-3-29 17:56
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4436
在线时间
378 小时
注册时间
2012-11-8
帖子
272
 楼主| 发表于 2022-3-29 17:35:27 | 显示全部楼层
hyrious 发表于 2022-3-26 14:42
有没有可能,在 refresh 里面同时生成一张反色的 contents,然后把选择框改成显示对应区域的反色精灵。

因 ...

我的脚本主要字体边缘平滑变化的缘故,不是纯色的,所以get_pixel会遗漏一些点
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
发表于 2022-3-29 18:32:09 | 显示全部楼层
你可以做个gif,或者上传2张静态图片对比
猜猜看吧,大致思路如下
用 Bitmap#get_pixel/set_pixel 还不如 Bitmap#draw_text 重绘。这文字要不要反相……

窗口皮肤纯色……先Bitmap#fill_rect()清空,算反相颜色,再Bitmap#fill_rect()填充,再文字描绘。

非纯色的话,新建个bitmap, 拷贝相关区域(从windowskin_name strect_blt获取无文字图像),
Bitmap#hue_change(180),再填充,再文字描绘
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4436
在线时间
378 小时
注册时间
2012-11-8
帖子
272
 楼主| 发表于 2022-3-29 22:36:51 | 显示全部楼层
RPGzh500223 发表于 2022-3-29 18:32
你可以做个gif,或者上传2张静态图片对比
猜猜看吧,大致思路如下
用 Bitmap#get_pixel/set_pixel 还不如 B ...

我现在是新建了Sprite覆盖在选项上,设置Sprite字体颜色和背景色,update_cursor_rect里根据index调整Sprite的x,y的数值和文字内容
我外挂的字体是用12一个px字库生成的字体文件,在窗口内必须用12整数倍字号的文字,其他字号就会出现之前说的字体边缘细节丢失的问题
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4436
在线时间
378 小时
注册时间
2012-11-8
帖子
272
 楼主| 发表于 2022-3-29 22:40:42 | 显示全部楼层
qq634488405 发表于 2022-3-29 17:33
脚本没出错的,原脚本没有的变量都有定义,主要是实现的方法,原因现在大致清楚一半,因为文字边缘平滑变 ...

嗯,主要是浏览器上传不了图片,文字描述可能有点不好理解,主要是想讨论下反色选择框的实现算法
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
37626
在线时间
5307 小时
注册时间
2006-11-10
帖子
6539
发表于 2022-3-30 17:37:33 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2022-3-30 17:46 编辑

https://rpg.blue/thread-378564-1-1.html  先用这个脚本

然后 window.contents.invert  就可以了, 还附赠烛光系统哦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 05:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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