- UID
- 343322
- 主题
- 注册时间
- 2012-11-16
- 在线时间
- 小时
- 最后登录
- 1970-1-1
签到天数: 59 天 [LV.5]常住居民I
|
发表于 2014-1-28 11:02:05
|
显示全部楼层
使用这个方法创建简单的计数器已经有一些年头了,但我认为他们还是应该写一写那些技巧的。不用怕,本大爷想到了!使用独立的计数器有很多好处,包括任由你增加计数,或者暂停和重置它们的值。
备注:这里大量使用了模运算符(Rainmeter中为%符号),“%”为求余数运算,如5/2=2余1那么在求余运算中这样表达 5%2,运算结果为1。这对于了解这个操作符如何工作来说非常重要。
现在我们开始搭建计数器:
[cCounter] ;函数名称
Measure=Calc ;函数类型
Formula=cCounter+1 ;cCounte为函数名称就是第一行括号里的内容
这个东西工作的时候会调用最后一个周期刷新的测量值。因此,通过调用内部测量值我们可以很容易的改变它的值,简单的来说:这个计数器的功能就是每次雨滴刷新的时候[cCounter] 的值加1。
备注:永远记住,当你命名你的计数器时,在变量/函数里有一个默认的东西叫做Counter,所以你自定义的计数器永远不能叫做Counter。
Counter是雨滴的默认计数器,它在雨滴每次刷新时自动+1,所以上面的计数器也可以写成:
[cCounter]
Measure=Calc
Formula=Counter
计数器在给定值后复位
计数器在给定值后复位非常容易,步骤和你使用计数器变量的时候是一样的。
[cCounter]
Measure=Calc
Formula=((cCounter+1)%30)
这个将在计数30之后重置为0,很容易理解这是由数学计算得出的:首先在每次计算的时候先算(cCounter+1)其结果为:1 2 3 4 5 6......一直到无限大,然后由结果除以30求余,
1%30=0余1,
2%30=0余2
.....
30%30=1余0
31%30=1余1
60%30=2余0
......
我们就得到了一个无限从0-30循环的计数器了。
想要改变循环数只要改变把除数 30 换成任意数值即可
通过鼠标操作重置计数器
当我们点击皮肤的时候如何将计数器重置为0呢?
[Rainmeter]
LeftMouseUpAction=!SetVariableReset 0
[cCounter]
Measure=Calc
Formula=(cCounter+1)*1
IfBelowValue=1
IfBelowAction=!SetVariableReset 1
DynamicVariables=1
用0与计数值相乘能很好的解决这个问题。一定要在你做完事情之后设置一个行动来将重置值设为1。
或者当鼠标放上去的时候选择重置计数器:
[Rainmeter]
MouseOverAction=!DisableMeasurecCounter
MouseLeaveAction=!EnableMeasurecCounter
[cCounter]
Measure=Calc
Formula=cCounter+1
备注:这个方法只在计数器至少禁用一个周期以上的时候有效。
现在我们可以联合几种方式将计数器计数完、复位,然后等着我们告诉它什么时候重新工作。[cCounter]
Measure=Calc
Formula=cCounter+1
IfEqualValue=30
IfEqualAction=!DisableMeasure#CURRENTSECTION#
当我们希望计数器重新开始计数的时候,我们只需要使用!EnableMeasure cCounter即可。
暂停计数让我们试试当你鼠标移动上去的时候暂停计数吧:
[Rainmeter]
MouseOverAction=!SetVariablePause 0
MouseLeaveAction=!SetVariablePause 1
[cCounter]
Measure=Calc
Formula=cCounter+1
DynamicVariables=1
当鼠标移动上皮肤这个动作被触发时,计数器停止增加1,并保留最后得到的计数值。当鼠标离开皮肤之后立即开始继续计数。
我们还可以让计数器计到给定的数值然后停止,并保持最后的数值不变。
[cCounter]
Measure=Calc
Formula=cCounter+(cCounter<30)
我们所做的是添加一个条件语句。条件语句不是“如果?然后?”的模式,而是非0即1的布尔值。这让我们能够很容易的将它们运用在数学公式中。
计数值触发动作[cCounter]
Measure=Calc
Formula=cCounter+1
IfAboveValue=30
IfAboveAction=[!DisableMeasure #CURRENTSECTION#]["SomeAction"]
这个将在MaxNumber之后计数完成,自锁,然后执行一些动作,比如打开一个插件。这个方法可以用来完成一些在皮肤加载后几个更新周期之后再需要执行的动作。
我们可以使用内置计数器功能/变量来完成同样的事情。请注意,Counter返回的值是从皮肤最初加载之后的刷新值,并且它只能由!RefreshApp命令重置为0。
[cCounter]
Measure=Calc
Formula=Counter
IfAboveValue=30
IfAboveAction=[!DisableMeasure#CURRENTSECTION#]["Some Action"]
备注:当刷新一组皮肤命令的时候,不要使用计数器,而是在[Rainmeter]部分使用OnRefreshAction=!SomeAction(此处有问题:什么叫在[Rainmeter]部分使用。。。。)。
奖励关卡:制作一个递减计数器
[cCounter]
Measure=Calc
Formula=(cCounter-1+(#MaxNumber#+1))%(#MaxNumber#+1)
上面的东西有点难以解释,我们做的事情是带入计数器的值,并递减1。然后我们必须增加MaxNumber里面的值,否则我们就会结束并得到一个负值。现在我们必须把剩下的值取绝对值,得到我们最终的结果。
引用:在计数器中可以使用 [Variables] 中定义的值,只要在使用是加上 #名称# 即可
举个栗子: 我们可以把上面栗子中所有的30替换成#MaxNumber# 1替换成#Pause#
首先,我们将创建一些变量以供稍后使用:
[Variables]
MaxNumber=30
Pause=1
[cCounter]
Measure=Calc
Formula=cCounter+#Pause#
[cCounter]
Measure=Calc
Formula=(cCounter-#Pause#+(#MaxNumber#+#Pause#))%(#MaxNumber#+#Pause#)
[cCounter]
Measure=Calc
Formula=cCounter+(cCounter<#MaxNumber#)
[cCounter]
Measure=Calc
Formula=cCounter+#Pause#
IfEqualValue=#MaxNumber#
IfEqualAction=!DisableMeasure#CURRENTSECTION# |
|