# 【审核】Counters Guide计数器导论 - Rainmeter官方文档 - 雨滴社区 - Powered by Discuz!
 找回密码
 点击注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4799|回复: 7

【审核】Counters Guide计数器导论

[复制链接]

签到天数: 127 天

[LV.7]常住居民III

发表于 2014-1-27 23:30:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?点击注册

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

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

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

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


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

  1. [Rainmeter]
  2. LeftMouseUpAction=!SetVariableReset 0

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

  1. [Rainmeter]
  2. MouseOverAction=!DisableMeasurecCounter
  3. MouseLeaveAction=!EnableMeasurecCounter

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

  1. [cCounter]
  2. Measure=Calc
  3. Formula=cCounter+1
  4. IfEqualValue=#MaxNumber#
  5. IfEqualAction=!DisableMeasure#CURRENTSECTION#
复制代码

当我们希望计数器重新开始计数的时候,我们只需要使用!EnableMeasure cCounter即可。

回复

使用道具 举报

签到天数: 189 天

[LV.7]常住居民III

发表于 2014-1-28 00:55:23 | 显示全部楼层
那句“本大爷想到了” 好雷人

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

使用道具 举报

签到天数: 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#
回复

使用道具 举报

签到天数: 1084 天

[LV.10]以坛为家III

发表于 2014-1-28 13:00:17 | 显示全部楼层
本帖最后由 Soliv_ctx 于 2014-1-28 13:21 编辑

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

使用道具 举报

签到天数: 127 天

[LV.7]常住居民III

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

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

使用道具 举报

签到天数: 59 天

[LV.5]常住居民I

发表于 2014-1-29 13:50:59 | 显示全部楼层
会哭的梧桐树 发表于 2014-1-28 14:39
Measure翻译成函数?这样子好么

意思表达到了就行,我也不知道怎么翻译好
回复

使用道具 举报

签到天数: 78 天

[LV.6]常住居民II

发表于 2014-2-5 18:36:08 | 显示全部楼层
ABOSS 发表于 2014-1-29 13:50
意思表达到了就行,我也不知道怎么翻译好

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

使用道具 举报

签到天数: 267 天

[LV.8]以坛为家I

发表于 2014-3-26 10:12:43 | 显示全部楼层
不错..........
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

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