Calc“伪”入门教程
本帖最后由 Real_聪 于 2013-1-12 20:49 编辑Calc入门教程作者:Real参考文档:夜色的“Rainmeter中文手册” 动态皮肤做了一阵子了,感觉还行,最开心就是可以顺便装下大神~哈哈今天,蜜蜂跟大家分享下这阵子学的calc,没有专业的语言,也没有大神的操作,只希望大家都能做出自己喜欢的更加精美的皮肤~ Calc是啥?我的理解就是动态变化的实现,包括数值和图形。(当然,你想实现更加强大的功能就要学lua了,反正我不会,就暂时顶着用了,这里不详述) 下面,从最简单的入手,先讲最简单的构成Measure=CalcFormula=XXXXXXXXX 首先,看看夜色在手册里对calc的介绍:Calc这个meausre是用来计算公式的。Formula这个定义计算公式,你可以将其他measure作为变量。 很好,坚持看到这里表明你基本理解了——Calc就是通过公式(函数)来改变某个“值”的!下面开始从简单的实例一步步来理解它的应用!!! 注意:下面的例子中的将作为检测Calc的值,请观察值的变化 例子1——特定值的表示:
这样写,函数(Formula)是1,所以检测值也就是1 (备注:加入上面这句Dynamicvariables=1是为了方便日后实际运用中,Test的值能动态变化,不加的话只能显示Calc值的初值) 例子2——值的递增:http://bbs.rainmeter.cn/data/attachment/album/201301/12/203310fah9n55a1959jl92.gif
函数是自身(MeasureCalc)不断加1,所以值是无限递增+1的。递减同理。
这里,要讲讲函数了,首先要知道Rainmeter里函数符号有哪些(引用文档):
Operators(算术操作符)
• + (加)
• - (减)
• * (乘)
• / (除)
• ** (幂,次方)
• % (余数或绝对值)
• & (按位与)
• | (按位或)
• ^ (异或)
• ~ (按位非)
Logical Operators(逻辑操作符)
• <> (不等于)
• = (等于)
• > (大于)
• < (小于)
• <= (小于等于)
• >= (大于等于)
• && (逻辑与)
• || (逻辑或)
Functions(函数)
• ATAN(x), ASIN(x), ACOS(x), COS(x), SIN(x), TAN(x) - 标准三角函数,其中x是弧度。
• ABS(x) - x的绝对值
• EXP(x) - 返回ex
• LOG(x) - 以10为底的x的对数。
• LN(x) - 以e为底的x的对数。
• SQRT(x) - x的平方根。
• SGN(x) - 当x为正数时,值为1,当x为负数时,值为-1。
• FRAC(x) - 返回参数x的小数部分 (例如. FRAC(1.234) = 0.234).
• TRUNC(x) - 返回参数x的整数部分(例如. TRUNC(1.234) = 1).
• FLOOR(x) –去除小数点后面的小数取整
• CEIL(x) –只要小数点后面数字不全为0,就去掉小数点后面的并且加1(俗称进1取整)。
• ROUND(x[,precision]) - 将x四舍五入到整数,也可以指定的保留的小数位数,精度可选。
• RAD(x) - 将x从度数转为弧度。
Constants
• PI - π(~3.14159265...)
• E - 欧拉常数e(~2.71828182...)
(注释:条件语句中1(true),0(false)分别表示真和假。)
——但是,可以发现例子2中,当值达到10后,开始出现“残缺”的问题
原因是,因为Rainmeter默认情况下,先读取代码原始尺寸,就是最开始表现出来的整体尺寸大小。由例子2可见,原始尺寸是0(Calc最小值是0)的大小。所以当值为10后,原来的面积满足不了10(二位数)的面积所需,就出现了“残缺”的问题了。 那么,如何解决呢?答案很简单!,只需要增加一句:
DynamicWindowSize如果设置为1窗口的大小在每一次更新的时候即使一次。 此窗口会自动缩放如果必要。(另外, 节点定义了 Rainmeter 的常规设置,一般情况下最好不要忽略——格式问题。前面例子是为了最简洁地阐述Calc功能,所以忽略= =|||) 例子3——宽度的变化http://bbs.rainmeter.cn/data/attachment/album/201301/12/203321nhnqwwn3km3wkmhw.gif
从例子3可见,本来一个长宽(WH)为200的正方形,宽度随着Calc的值(递增+4)变化而改变着,成为一个越来越宽的矩形! 现在,从上面三个例子中相信你已经理解了动态皮肤的原理了吧?当然,不止W(宽度),连XY坐标、透明度ImageAlpha、色彩值RGB等等带值的地方全部可以套入!下面是我做过的皮肤的基本应用——http://bbs.rainmeter.cn/data/attachment/album/201301/12/203920e9rmmnmka4nwkfvm.jpg
http://tieba.baidu.com/p/2082029712(图片剪裁ImageCrop的值的变化)http://bbs.rainmeter.cn/data/attachment/album/201301/06/135432rx44424htggrrzs0.gif
http://tieba.baidu.com/p/2086481408(随Calc检测电量值的变化改改变显示的图片(利用名字变化))http://bbs.rainmeter.cn/data/attachment/album/201301/12/203922rbbgq4b118igkaqb.jpg
http://tieba.baidu.com/p/2072441814(高度H的变化) 感谢你一路坚持看到现在,相信你已经蠢蠢欲动了!但是,还有些特别的功能哦!下面,讲讲两个特别的但经常会用到的知识点例子:1, Formula=Counter%10例子3:http://bbs.rainmeter.cn/data/attachment/album/201301/12/204401y8ul5spjzlli6l4y.gif
(返回从0—9的递增循环,注意不会到10!Counter%30就是0—29)2,Formula=Random例子4:http://bbs.rainmeter.cn/data/attachment/album/201301/12/203324ezul3x9hzzh3kb3k.gif
(函数返回随机值,默认是0—100。当然,你也可以利用LowBound和HighBound设定上下限。)UpdateRandomUpdateRandom=1 表示每次更新都会返回一个随机数。UpdateRandom=0 表示刷新皮肤才返回一个随机数。 到这里,相信你已经基本了解Calc是如何实现皮肤的动态变化了吧?动态变化其实并不神秘和强大,不懂lua也可以做得美美的哦!只要你有足够的耐心和丰富的创意~ 更多Calc相关资料,请参考夜色翻译的“Rainmeter中文手册”。http://tieba.baidu.com/p/1965376763 谢谢大家~
啦啦啦~~
我来瞧一瞧~~
辛苦蜜蜂同志。 占领本层。。。楼下速速顶起 技术大神,支持……{:10_452:} 前排广告位出租~ LZ 辛苦了 {:10_423:} 貌似很厉害的赶脚{:10_402:}