会哭的梧桐树 发表于 2014-1-27 23:30:13

【审核】Counters Guide计数器导论

本帖最后由 会哭的梧桐树 于 2014-2-3 14:22 编辑

使用这个方法创建简单的计数器已经有一些年头了,但我认为他们还是应该写一写那些技巧的。不用怕,本大爷想到了!使用独立的计数器有很多好处,包括任由你增加计数,或者暂停和重置它们的值。
备注:这里大量使用了模运算符(Rainmeter中为%符号),否则就会被称为剩余部分(此处有问题:这句话没看懂)。这对于了解这个操作符如何工作来说非常重要。

首先,我们将创建一些变量以供稍后使用:
MaxNumber=30
Pause=1
Reset=1现在我们开始搭建计数器:
Measure=Calc
Formula=cCounter+1这个东西工作的时候会调用最后一个周期刷新的测量值。因此,通过调用内部测量值我们可以很容易的改变它的值(此处有问题:没用过calc,不知道怎么工作的,估计翻译出来不对劲)。
备注:永远记住,当你命名你的计数器时,在变量/函数里有一个默认的东西叫做Counter,所以你必须稍微变一下计数器的名字。

计数器在给定值后复位
计数器在给定值后复位非常容易,步骤和你使用计数器变量的时候是一样的。
Measure=Calc
Formula=(cCounter+1)%(#MaxNumber#+1)这个将在计数30之后重置为0,这是由MaxNumber设定好了的。我们用一个测量值将MaxNumber加上1,它将会在MaxNumber的值之后重置,否则它会在MaxNumber到最后一格的时候重置。
如果你想让计数器在重置之后的值为1而不是0,我们只需要稍微改动一点点就行了:
Measure=Calc
Formula=cCounter%#MaxNumber#+1用这个方法我们就不需要担心如何将1添加进重置的值里面了。


通过鼠标操作重置计数器
当我们点击皮肤的时候如何将计数器重置为0呢?

LeftMouseUpAction=!SetVariableReset 0


Measure=Calc
Formula=(cCounter+1)*#Reset#
IfBelowValue=1
IfBelowAction=!SetVariableReset 1DynamicVariables=1
用0与计数值相乘能很好的解决这个问题。一定要在你做完事情之后设置一个行动来将重置值设为1。
或者当鼠标放上去的时候选择重置计数器:

MouseOverAction=!DisableMeasurecCounter
MouseLeaveAction=!EnableMeasurecCounter


Measure=Calc
Formula=cCounter+1 备注:这个方法只在计数器至少禁用一个周期以上的时候有效。
现在我们可以联合几种方式将计数器计数完、复位,然后等着我们告诉它什么时候重新工作。


Measure=Calc
Formula=cCounter+1
IfEqualValue=#MaxNumber#
IfEqualAction=!DisableMeasure#CURRENTSECTION#
当我们希望计数器重新开始计数的时候,我们只需要使用!EnableMeasure cCounter即可。

暂停计数
让我们试试当你鼠标移动上去的时候暂停计数吧:
MouseOverAction=!SetVariablePause 0
MouseLeaveAction=!SetVariablePause 1


Measure=Calc
Formula=cCounter+#Pause#
DynamicVariables=1
当鼠标移动上皮肤这个动作被触发时,计数器停止增加1,并保留最后得到的计数值。当鼠标离开皮肤之后立即开始继续计数。
我们还可以让计数器计到给定的数值然后停止,并保持最后的数值不变。
Measure=Calc
Formula=cCounter+(cCounter<#MaxNumber#)我们所做的是添加一个条件语句。条件语句不是“如果?然后?”的模式,而是非0即1的布尔值。这让我们能够很容易的将它们运用在数学公式中。

计数值触发动作

Measure=Calc
Formula=cCounter+1
IfAboveValue=#MaxNumber#
IfAboveAction=[!DisableMeasure #CURRENTSECTION#]["SomeAction"]
这个将在MaxNumber之后计数完成,自锁,然后执行一些动作,比如打开一个插件。这个方法可以用来完成一些在皮肤加载后几个更新周期之后再需要执行的动作。
我们可以使用内置计数器功能/变量来完成同样的事情。请注意,Counter返回的值是从皮肤最初加载之后的刷新值,并且它只能由!RefreshApp命令重置为0。
Measure=Calc
Formula=Counter
IfAboveValue=#MaxNumber#
IfAboveAction=[!DisableMeasure#CURRENTSECTION#]["Some Action"]备注:当刷新一组皮肤命令的时候,不要使用计数器,而是在部分使用OnRefreshAction=!SomeAction(此处有问题:什么叫在部分使用。。。。)。

奖励关卡:制作一个递减计数器
Measure=Calc
Formula=(cCounter-1+(#MaxNumber#+1))%(#MaxNumber#+1)
上面的东西有点难以解释,我们做的事情是带入计数器的值,并递减1。然后我们必须增加MaxNumber里面的值,否则我们就会结束并得到一个负值。现在我们必须把剩下的值取绝对值,得到我们最终的结果。

语笑嫣然 发表于 2014-1-28 00:55:23

那句“本大爷想到了” 好雷人

一个完全不认识派派并且不认识RM的新人看了心里犹如一万只马奔腾而过

ABOSS 发表于 2014-1-28 11:02:05

使用这个方法创建简单的计数器已经有一些年头了,但我认为他们还是应该写一写那些技巧的。不用怕,本大爷想到了!使用独立的计数器有很多好处,包括任由你增加计数,或者暂停和重置它们的值。
备注:这里大量使用了模运算符(Rainmeter中为%符号),“%”为求余数运算,如5/2=2余1那么在求余运算中这样表达 5%2,运算结果为1。这对于了解这个操作符如何工作来说非常重要。



现在我们开始搭建计数器:

                     ;函数名称
Measure=Calc                  ;函数类型
Formula=cCounter+1            ;cCounte为函数名称就是第一行括号里的内容

这个东西工作的时候会调用最后一个周期刷新的测量值。因此,通过调用内部测量值我们可以很容易的改变它的值,简单的来说:这个计数器的功能就是每次雨滴刷新的时候 的值加1。
备注:永远记住,当你命名你的计数器时,在变量/函数里有一个默认的东西叫做Counter,所以你自定义的计数器永远不能叫做Counter。
Counter是雨滴的默认计数器,它在雨滴每次刷新时自动+1,所以上面的计数器也可以写成:

                     
Measure=Calc                  
Formula=Counter

计数器在给定值后复位
计数器在给定值后复位非常容易,步骤和你使用计数器变量的时候是一样的。


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呢?


LeftMouseUpAction=!SetVariableReset 0


Measure=Calc
Formula=(cCounter+1)*1
IfBelowValue=1                     
IfBelowAction=!SetVariableReset 1
DynamicVariables=1

用0与计数值相乘能很好的解决这个问题。一定要在你做完事情之后设置一个行动来将重置值设为1。
或者当鼠标放上去的时候选择重置计数器:


MouseOverAction=!DisableMeasurecCounter
MouseLeaveAction=!EnableMeasurecCounter


Measure=Calc
Formula=cCounter+1

备注:这个方法只在计数器至少禁用一个周期以上的时候有效。
现在我们可以联合几种方式将计数器计数完、复位,然后等着我们告诉它什么时候重新工作。
Measure=Calc
Formula=cCounter+1
IfEqualValue=30
IfEqualAction=!DisableMeasure#CURRENTSECTION#

当我们希望计数器重新开始计数的时候,我们只需要使用!EnableMeasure cCounter即可。
暂停计数让我们试试当你鼠标移动上去的时候暂停计数吧:


MouseOverAction=!SetVariablePause 0
MouseLeaveAction=!SetVariablePause 1


Measure=Calc
Formula=cCounter+1
DynamicVariables=1

当鼠标移动上皮肤这个动作被触发时,计数器停止增加1,并保留最后得到的计数值。当鼠标离开皮肤之后立即开始继续计数。
我们还可以让计数器计到给定的数值然后停止,并保持最后的数值不变。


Measure=Calc
Formula=cCounter+(cCounter<30)

我们所做的是添加一个条件语句。条件语句不是“如果?然后?”的模式,而是非0即1的布尔值。这让我们能够很容易的将它们运用在数学公式中。

计数值触发动作
Measure=Calc
Formula=cCounter+1
IfAboveValue=30
IfAboveAction=[!DisableMeasure #CURRENTSECTION#]["SomeAction"]

这个将在MaxNumber之后计数完成,自锁,然后执行一些动作,比如打开一个插件。这个方法可以用来完成一些在皮肤加载后几个更新周期之后再需要执行的动作。
我们可以使用内置计数器功能/变量来完成同样的事情。请注意,Counter返回的值是从皮肤最初加载之后的刷新值,并且它只能由!RefreshApp命令重置为0。


Measure=Calc
Formula=Counter
IfAboveValue=30
IfAboveAction=[!DisableMeasure#CURRENTSECTION#]["Some Action"]

备注:当刷新一组皮肤命令的时候,不要使用计数器,而是在部分使用OnRefreshAction=!SomeAction(此处有问题:什么叫在部分使用。。。。)。

奖励关卡:制作一个递减计数器   


Measure=Calc
Formula=(cCounter-1+(#MaxNumber#+1))%(#MaxNumber#+1)

上面的东西有点难以解释,我们做的事情是带入计数器的值,并递减1。然后我们必须增加MaxNumber里面的值,否则我们就会结束并得到一个负值。现在我们必须把剩下的值取绝对值,得到我们最终的结果。


引用:在计数器中可以使用 中定义的值,只要在使用是加上 #名称# 即可

举个栗子: 我们可以把上面栗子中所有的30替换成#MaxNumber#1替换成#Pause#

首先,我们将创建一些变量以供稍后使用:


MaxNumber=30
Pause=1


Measure=Calc
Formula=cCounter+#Pause#


Measure=Calc
Formula=(cCounter-#Pause#+(#MaxNumber#+#Pause#))%(#MaxNumber#+#Pause#)


Measure=Calc
Formula=cCounter+(cCounter<#MaxNumber#)


Measure=Calc
Formula=cCounter+#Pause#
IfEqualValue=#MaxNumber#
IfEqualAction=!DisableMeasure#CURRENTSECTION#

Soliv_ctx 发表于 2014-1-28 13:00:17

本帖最后由 Soliv_ctx 于 2014-1-28 13:21 编辑

楼上好认真,我也懒得说其他的了,就一个意见,“本大爷”去掉。

会哭的梧桐树 发表于 2014-1-28 14:39:34

ABOSS 发表于 2014-1-28 11:02
使用这个方法创建简单的计数器已经有一些年头了,但我认为他们还是应该写一写那些技巧的。不用怕,本大爷想 ...

Measure翻译成函数?这样子好么

ABOSS 发表于 2014-1-29 13:50:59

会哭的梧桐树 发表于 2014-1-28 14:39
Measure翻译成函数?这样子好么

{:10_449:}意思表达到了就行,我也不知道怎么翻译好

suixin812 发表于 2014-2-5 18:36:08

ABOSS 发表于 2014-1-29 13:50
意思表达到了就行,我也不知道怎么翻译好

Measure不要译作函数。Rainmeter中的Measure和编程语言中的函数还是有很大区别的,Measure就不要翻译好了

董连志 发表于 2014-3-26 10:12:43

不错..........
页: [1]
查看完整版本: 【审核】Counters Guide计数器导论