krpano action的语法与用法

krpano动作/函数的调用规定:

actionname(parameters); …
  • actionname可以是
    • krpano内置的 action 的名字或是…
    • 在xml中任意位置定义的 <action> 元素的名字或是…
    • 包含krpano动作代码的krpano变量或属性的名字或是对应Actionscript3 (Flash)或Javascript (HTML5) 函数的链接。
  • 空白字符 (例如空格、制表符、新行)如果不在引号(单引号或双引号)内的话,则会被忽略。
  • 如果有多个动作要调用,每一个调用要用分号结束。
  • 动作调用将按顺序一个接一个进行。
  • 参数根据每个不同的action决定是否可以或能够进行传递。
  • 当传递多个参数时,每个参数需要用逗号隔开。
  • 所有参数以文本的形式传递给动作。如果参数一个变量,则只有变量的名字传递 – 而不是变量的数值!为了传递变量的数值,需要使用 get(variable)
    注意 – 某些动作会自动将变量解析为其数值,这要依据动作自身而定。
  • 要在参数内使用空白字符和逗号,该参数需要包含在单引号  或双引号中。

 

我们都知道krpano action是下面这样子的:

在这里body就是action的代码。

action可以按照以下的方式执行调用:

或是

N小于或等于99。也就是说,你最多可以设置99个参数。

krpano action允许你使用 %N来代表参数,N就是从1到99。%0是用于在action内表示action的名字。

换句话说:

  • %0 是要调用的action的名字
  • %1 是传递到该函数的第一个参数,如果没有第一个参数则为空
  • %2 是传递到该函数的第二个参数,如果没有第二个参数则为空

….

  • %9 是传递到该函数的第九个参数,如果没有第九个参数则为空
  • %10 是传递到该函数的第十个参数,如果没有第十个参数则为空
  • %11 是传递到该函数的第十一个参数,如果没有第十一个参数则为空

….

首先,是一个简单例子:

输出过程:

INFO: hello world
INFO: hello kitty
INFO: hello Klaus
INFO: hello null

该代码包含两个action:hello 将用户传递到action的第一个参数输出,main 则以不同的参数执行四次 hello 功能。注意第四个调用是没有传递参数: hello();. 输出为 INFO: hello null.

参数替换

krpano的action语言与其它编程语言不同,它的参数不会在代码主体内成为局部变量,它只是一个传递到代码主体内要代替的参数。你可以看作在代码主体使用某个文本编辑器,搜索所有对应%1,然后用它所代表的字符串(第一个参数)来替换它。对应的用第二个参数的字符串替换%2 ,如果%N没有对应的参数,则用null来替换。

这种替换发生在action被调用之时,但在action被执行之前。看看下面的例子:

main 这个action中,首先要调用的是test(abc,def,123,456);当浏览器调用到该行代码时,参数会替换到text的代码主体中。也就是,在test action被执行之前。

  • action的名字 “test” 替换所有 %0
  • 第一个参数 “abc” 替换所有 %1
  • 第二个参数 “def” 替换所有f %2
  • 第三个参数 “123” 替换所有 %3
  • 第四个参数”456″ 替换所有 %4

因此原来的 test 代码

变成

在替换后,执行代码,输出:

action test arg1 is abc, arg2 is def, args 3 and 4 are 123456

然后到main的下一行代码,text再次以不同的参数被调用test(krpano,is,#,1),这一次action的名字 “test” 替换 %0,”krpano” 替换%1,”is” 替换 %2, “#” 替换 %3,  “1” 替换%4。因此在执行之前,代码从

转换为

然后执行,输出

action test arg1 is krpano, arg2 is is, args 3 and 4 are #1

一个有意思的事情是,在这个例子中,%3和%4的替换是发生在引号内。krpano对参数的处理是很简单和机械式的,它不考虑语法。尽管最终的代码必须是正确的,但替换可以发生在引号里,也可以发生在参数列表,在函数名字里,只要是代码体的任意部分。实际上,整段代码都可以通过参数进行传递,正如下面的例子。

假设我们需要在全局变量debug为true时来执行一段代码。我们可以创造一个叫做dbg的action,我们需要有条件地执行一段可传递的代码。

当这action执行时,发生什么事情呢?只会输出:

INFO: a is 2000

如果我们一步步来看main代码,首先我们会看到变量a被设为123,然后变量b设为345,然后dbg带着参数被调用。

实际上这个多行多命令的参数,就是由两个分号组成的参数。因此

就变成了

当这个被执行时,变量debug还没有设置,因此if为false,trace没有被执行。

然后main的下一行将debug设为true,然后a改为2000,b改为1000。然后按照下面的参数执行dbg:

因此

就变成了

现在执行代码,因为debug在这之前设为true,因此if判断成立,同时a又比b大,因此输出 trace(“a is “,a) 然后我们得到a is 2000.

 

在 “krpano action的语法与用法” 上有 2 条评论

发表评论