Project1

标题: 为什么RM里面关于颜色代码的设置不用16位进制8位编码 [打印本页]

作者: chd114    时间: 2018-1-7 23:46
标题: 为什么RM里面关于颜色代码的设置不用16位进制8位编码
看到的大部分都是Color.new(r,g,b,a)
但是并没有看到#AARRGGBB这样的8位16进制编码
感到有点奇怪
作者: guoxiaomi    时间: 2018-1-8 01:22
Color.new('11223344'.scan(/../).map{|s| s.to_i(16)})
作者: summer92    时间: 2018-1-8 01:28
那是网站用的颜色吧,RM没必要兼容网站
作者: 芯☆淡茹水    时间: 2018-1-8 08:42
本帖最后由 芯☆淡茹水 于 2018-1-8 19:26 编辑

用对象不是要方便很多么!

color = Color.new(255,255,255)

红 减去 20 :color.red -= 20

var color = '#ffffff'

红 减去 20 ,怎么减方便?

@SailCat    难道不可以直接这样么:
Color.new(self[1..2].to_i(16),self[3..4].to_i(16),self[5..6].to_i(16),self[7..8] == "" ? 255 : self[7..8].to_i(16))
作者: 越前リョーマ    时间: 2018-1-8 15:19
编辑器就用的RGB,这个可读性强方便调整,写个十六进制鬼知道是什么颜色
作者: 歌莉·萌露    时间: 2018-1-8 18:32
索性rm内部直接写16进制的脚本
作者: SixRC    时间: 2018-1-9 00:44
本帖最后由 SixRC 于 2018-1-9 18:50 编辑

重点不在于十六进制或者十进制而在于是否拆成rgba吧
因为十进制或十六进制只是表示问题(ruby解释上不清楚)
以ruby (xp)来论
ruby的对象在内存里分几种
ruby的整数其实只能保存31位 因为最小位为了判别而存在
是立即数就是1 否则不是false true nil 就是一个指针(内存地址必然是4字节对齐)
所以ruby保存一个数比方0xFFFFFFFF 就需要用到bignum
所以假如颜色作为一个整体而存在 在内存里不可能是立即数
也即需要用指针表示它是一个颜色对象 (之后的对象特指需要指针的)
现在假设它有一个属性就是颜色值 这个属性的类型也不确定
可能是整数 可能是长整数
读取写入的时候很不方便
即使统一转换成长整数在使用上不一定效率好多少
因为长整数又是对象不是立即数
修改得多通过起码一层指针
改单一元素也得单独抽出来算好再放回去

而拆成rgba很简单
只要开辟16字节 就是四个ruby立即数
修改颜色也方便 要改哪个要素改哪个
作为整体读取的时候也就是位移一下加一下

这些都是纸上谈兵 没试过也不清楚rgss怎么处理的 明天或许会看一下
更新 储存格式是四个挨着的浮点数rgba 不过好像浮点不浮点没啥用吧..

不过我觉得颜色类不管怎么处理 效率都不会差多少吧
渲染图片显示的时候和颜色类无关
想不到什么地方会大量新建颜色类使用颜色类
所以最后的选择肯定是哪个方便用哪个吧?

个人意见 仅作参考




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