krpnao action方法中文文档

一、krpano动作/功能参考

    1.编程逻辑/流量控制

(1)def(variable, type, value*)

定义具有特定类型的新变量,并可选地将其设置为给定值。当没有给定值且变量已经存在时,则具有当前值的变量将转换为给定类型。

boolean - true or false

number - a numeric value

integer or int - an integer value

uint - an unsigned integer value

string - text characters

object - an object with custom properties

array - a value-array

example:

def(b, boolean, true);

def(n, number, 123.456);

def(s, string, 'text');

def(obj, object);

def(obj.x, number, 0.0);

def(obj.y, number, 0.0);

(2)set(variable, value);set(object, variable:type=value, variable:type=value, ...);

set()操作是两种调用/使用可能性:

当使用两个参数调用时:

这是一个值的一个变量的正常集合。

当使用三个或更多参数调用时:

这是一个同时包含多个变量的多重集合。

在这里,变量将被设置或添加到对象中。

也可以选择指定变量的类型。

object

多个集合调用的对象-在此对象上将设置变量。

当对象不存在时,将创建它。

要在特定范围内定义变量,可以在这里使用全局或局部对象。

variable

变量名。

当变量不存在时,将创建该变量。

boolean - true or false

number - a numeric value

integer or int - an integer value

uint - an unsigned integer value

string - text characters

正常设置:

set(var1, 'hello');

set(var2, get(var1));

set(fullscreen, true);

set(layer[p1].visible, false);

set(hotspot[h1].scale, 2.5);

set(contextmenu.item[0].caption, 'hello item');

set(events.onxmlcomplete, null);

多组设置:

set(layer[p1], visible=false, alpha=0.5);

set(hotspot[hs1],

    type='text',

    ath=0.0,

    atv=0.0,

    html='Test Text',

    css='text-align:center',

    bg=false

);

set(global,

    test='Test text',

    havesomething:boolean=true,

    var2:string=get(var1),

    value:number=calc(1 + 2*3)

);

(3)action(get(variable), ... )

array[get(variable)]

get:variable" ... />

将变量解析为其值。get(var)操作是一个特殊操作,只能在调用其他操作或访问数组元素时用作参数。

当变量不存在时,get()将返回null。

注意-有些操作会自动尝试将其给定参数解析为其值。对于这些操作,不需要使用get(var)。

example:

set(dstvar, get(srcvar));

looktohotspot(get(name));

lookto(get(h), get(v), get(f));

showtext(get(msg));

tween(var,get(dstval));

set(pic, spot1);

set(hotspot[get(pic)].visible, false);

trace('xyz=', xyz, ' get(xyz)=', get(xyz));

txtadd(msg, 'fov=', get(view.fov));

(4)calc(variable, expression)

action(calc(expression), ... )

array[calc(expression)]

calc:expression" ... />

计算/求值/将表达式解析为其值。

calc(expression)操作是一个特殊操作,只能在调用其他操作或访问数组元素时用作参数。

存储结果的变量。当变量不存在时,将创建该变量。数学或逻辑表达式。

set(y_new, calc(y_old - offset1 + offset2));

set(animationtime, calc('%1' == 'instant' ? 0.0 : 0.5));

(5)copy(destination, source,typeconversion*)

copy()操作将内容从一个变量复制到另一个变量。默认情况下,这与:set(destination,get(source))相同。

目标变量。当变量不存在时,将创建它。

源变量。当变量不存在时,将为目标变量设置null。

类型转换(可选)

当设置为true(默认值)时:

当两个变量都有不同的类型时,源变量的值将转换为目标变量的类型。

设置为false时:

将源变量的值和类型复制到目标变量。

(6)delete(variable, ...)

删除并移除给定的变量。

参数:变量,任何变量名。

可以一次删除多个变量-只需传递多个变量名(用逗号分隔)。

set(tmp1, ...);set(tmp2, ...);delete(tmp1, tmp2);

(7)if(true/false,yes,no)

if(fullscreen, fullscreensetup(), windowsetup() );

if(fullscreen, set(layer[controls].visible, false) );

if(i LT 10, loop(next) );

if(var === null, set(var,0));

if(hotspot[spot1] === null, trace(there is no spot1 hotspot));

if((varA GT 5) AND (varA LT 10),

    trace('varA is between 5 and 10')

  );

if(varA AND varB AND varC, trace('all vars are true') );

if(var1 GT var2,

    trace('condition is true');

    lookto(100,20,50);

  ,

    trace('condition is false');

    lookto(0,0,100);

  );

if(a*2+b GT (c+3)*1.5 OR teststring == '123', ...);

if(

    test == 1, trace('test is 1'),

    test == 2, trace('test is 2'),

    test == 3, trace('test is 3'),

    trace('test is someting else')

);

(8)delayedcall(delay, actions);delayedcall(id, delay, actions)

在给定的时间后调用/执行给定的操作。

参数:

id(可选)

delayedcall的可选唯一id。

此id可用于通过调用stopdelayedcall(id)来停止delayedcall。

延迟

执行操作前等待的秒数。

行动

延迟后要调用的操作。

delayedcall(5.0, hidelogo() );

delayedcall(10, looktohotspot(spot1);loadpano(pano2.xml); );

delayedcall(1, showtext('hello');      );

delayedcall(4, showtext('to the pano'); );

  copy(layer[cursor].x, mouse.x);

  copy(layer[cursor].y, mouse.y);

  delayedcall(0.02, updatemousepos() );

(9)stopdelayedcall(id);

使用给定的id停止delayedcall。

        onnewpano="delayedcall(introimage, 5.0, hide_introimage() );"

        onremovepano="stopdelayedcall(introimage);"

(10)nexttick(actions)

在下一个处理中调用/执行给定的操作-这意味着在当前操作之后,但要尽快。

(11)callwhen(condition, actions);callwhen(id, condition, actions);

在条件为真或将成为真时调用给定的操作。

当条件当前不是true时,则callwhen()操作将一直等待,直到条件变为true。

参数:

id(可选)

callwhen的可选唯一id。

通过调用stop callwhen(id),此id可用于停止等待的callwhen。

条件

逻辑表达式。

callwhen()操作将在每帧中不断检查此条件,直到它变为真。

行动

条件为真时要调用的操作。

callwhen(plugin[video].loaded, plugin[video].playvideo(...); );

callwhen(plugin[maps].loaded, plugin[maps].setcenter(...); );

(12)stopcallwhen(id);

使用给定的id停止仍在等待的呼叫。

(13)for(startactions, condition, nextactions, loopactions)

首先调用startactions,然后检查条件,当它为true时,然后调用loopactions,然后调用nextactions,然后再次开始检查条件和循环。

for(set(i,0), i LT 10, inc(i), trace('i=',i) );.

for(set(i,0), i LT layer.count, inc(i),

  trace('layer[',i,'].name=',layer[get(i)].name);

);

(14)loop(condition, loopactions);asyncloop(condition, loopactions, doneactions*);

只要条件为true,就将重复调用loopactions。当循环本身完成时,normal loop()操作将继续执行以下操作。asyncloop()将中间继续执行以下操作,并每帧执行一次loopactions。当异步循环最终完成时,将调用doneAction。

ondown="asyncloop(pressed, layer[scrollarea].scrollby(+2,0) );"

onover="asyncloop(hovering, updatemousepos(), hideinfo() );"

asyncloop(true, framehandler() )

(15)renderloop(loopactions);stoprenderloop();

renderloop()操作将在每帧执行一次loopactions。

要停止循环,需要在loopactions内部调用stoprenderloop()操作。

krpano-Action-Code Example:

renderloop(

    if(...done with rendering...,

      stoprenderloop();  );

);

Javascript-Code Example:

krpano.actions.renderloop(function(){

    if(...done with rendering...){

      krpano.actions.stoprenderloop();

    }

});

(16)setinterval(id, delay, actions);clearinterval(id);

重复调用/执行给定的操作,并在两个操作之间有一个延迟时间间隔。

此id可用于通过调用clearinterval(id)来停止间隔。

延迟

操作调用之间等待的秒数。

使用0作为延迟时,每帧将调用一次操作。

行动

调用每个延迟秒的操作。

setinterval(time, 1.0,

    jsget(time, (new Date()).toLocaleTimeString(); );

    trace('time=',time);

  );

        onkeyup="clearinterval(get(keycode));"

        />

(17)toggle(variable);

toggle操作在true和false之间切换给定(布尔)变量的值。

toggle(fullscreen);

toggle(layer[button1].visible);

(18)switch(variable);switch(variable, value1, value2, ...);

开关动作在几个状态之间/通过几个状态来切换给定变量的值。每次调用开关动作时,值都将被切换/更改。

当只给出没有值参数的变量本身时,变量将在true和false之间切换。

当有两个或多个作为参数给定的值时,变量将切换所有这些值(从左到右)

switch(fullscreen);

switch(layer[button1].visible);

switch(layer[button1].alpha, 1.0, 0.5);

switch(layer[child].parent, button1, button2, button3);

switch(destpos, -100, 0, +100); tween(y,get(destpos));

(19)break();

中断/停止当前流中的操作调用的执行,以及从一个嵌套级别向上的操作调用(例如,当在if()调用内部调用时,也将停止if外部的流)。

当在for()或loop()循环中使用时,break()调用也将停止该循环。

(20)exitcall();

直接退出/停止当前操作“调用”。

“调用”要么是对的调用,要么是对包含action代码的变量的调用,要么是对事件的action代码的调用。

(21)callwith(caller, actions);

使用特定的插件/层或热点元素作为调用方调用krpano操作代码。这可用于直接属性访问或模拟对这些元素的事件调用。

参数:

来电者

应该用作调用方的元素。

只能是/元素。

行动

任何krpano动作代码。

代码将在调用方的“context”中执行,这意味着对其属性的“直接”访问。

callwith(layer[test], onclick);

callwith(layer[test], trace('test pos=',x,'/',y); );

callwith(layer[test], tween(alpha, 0.0); );

(22)scope(scope, actions);

在特定范围内调用krpano操作代码。

scope(localonly, for(set(i,0), i LT 10, inc(i), trace(i)); );

scope(private:my_xml_plugin, trace(internal_var); );

(23)parentscopeset(variable, value)

将变量设置为a值-类似于Set()调用-但在父操作的范围内。

这可用于将内部本地作用域操作的结果返回/传递回外部作用域操作。

(24)linkeventscope(element);

将当前本地作用域链接到给定元素的事件。

当调用该元素的事件(例如onclick)时,事件代码中将使用相同的作用域。默认情况下,事件始终使用全局范围。

注意-当链接到一个作用域时,有必要使用调用者来寻址元素作用域本身!

(25)assignstyle(elementname, styles);

将属性从一个或多个