一、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(); 直接退出/停止当前操作“调用”。 “调用”要么是对 (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); 将属性从一个或多个