用户工具

站点工具


vrm:语法参考

深入开发语言参考

这是一个小巧的动态脚本语言。通过它,可以使用命令或函数对全景项目进行操控,除了内置的动作或函数,我们还可以自行创建新的动作及函数。脚本语言是动态、基本无类型的,仅一些预定义变量具有类型,但通常是不紧要的,因为脚本内的所有类型转换会自动完成。

全局变量参考


版本/构建信息(只读)

变量名说明
version语言版本号
xmlversionxml文档版本号
  • 注意:未设置时,将与语言版本号相同
  • build语言构建日期

    鼠标/键盘

    变量名
    mouse.x
    mouse.y
    mouse.stagex
    mouse.stagey
    mouse.downx
    mouse.downy
    鼠标位置。
    • mouse.x与mouse.y的坐标原点为area的左上角;
    • mouse.stagex与mouse.stagey的坐标原点为screen的左上角。
    • mouse.downx与mouse.downy存贮最后一次鼠标按下时的位置(右键或右键),该值以area的左上角为原点。
    变量名
    keycode
    最后按下或释放键的键码。
    键码值将在onKeyDown和onkeyup事件中被设置。

    以下代码用于显示按键的键码

    <events onkeydown="showlog(); trace('您按下的键值为:',keycode);" />
    变量名
    wheeldelta滚轮的标准滚动值.
  • 在大多数系统上通常为 +3(前滚) 或 -3(后滚)
  • wheeldelta_raw未缩放未取整前的原始滚动值
  • 注意:在flash模式下,仅当在窗口模式(非全屏)且使用默认embedding脚本时才有效;而在html5下,始终有效。
  • wheeldelta_touchscale虽然触摸设备没有鼠标滚轮,但是当双指缩放时,仍然可能触发onmousewheel事件,该变量将提供相对的比例缩放详细信息。
  • 注意: 仅适用于触摸设备!在其他装置上的值将永远是0。
  • 鼠标滚轮的滚动值。
    这些变量将在onmousewheel事件中被设置

    屏幕参数/设置(只读)

    语句默认值
    fullscreenfalse
    该变量可以用来检查或更改全屏模式的当前状态。若变量被改变,说明全屏模式被改变。

    示例-切换到全屏模式:

    onclick="set(fullscreen,true);"

    示例-在全屏模式与窗口模式之间切换:

    onclick="toggle(fullscreen);"

    注意:
    在使用该设置前,应该检查当前设备/浏览器是否支持全屏模式,这可以在静态xml中使用devices="fullscreensupport"或动态语句中使用device.fullscreensupport变量来完成。
    由于Flash Player和HTML5安全限制,切换到全屏模式需要用户操作动作(如点击鼠标或按下键盘),这意味着切换全屏模式需要在onclick或onKeyDown事件中进行。
    当HTML5浏览器不支持全屏模式时(如iOS),全屏设置将仅改变viewer的大小以匹配整个浏览器窗口的大小。由于技术限制,无法在IFRAME中及嵌套HTML中工作。
    若尝试从IFRAME内部使用全屏模式,那么有必要在IFRAME的声明中加入allowFullScreen,以告诉浏览器该IFRAME是充许切换到全屏的。

    变量名默认值
    stagewidth
    stageheight
    当前视图窗口的像素大小,可以在onResize事件中获取这些尺寸。
    变量名默认值
    stagescale1.0
    全局整体比例设置。
    该设置将缩放所有krpano的元素大小。

    通过缩放所有元素,舞台尺寸(屏幕尺寸/分辨率)本身将反比例增加,比如stagescale=0.5时,舞台尺寸将为200%。

    该默认值取决于具体的设备、浏览器、js的window.devicePixelRatio值,在桌面和平板上该默认值通常为1.0;在移动设备上通常为0.5。

    这意味着,在移动设备上的元素大小通常为桌面和平板的一半。
    要禁用该行为(例如要实现一些自定义的响应式布局)可以将下面代码放到第一个xml中。
    <action name="mobilescale" autorun="preinit" devices="mobile">
    mul(stagescale,2);
    </action>
    变量名默认值
    bgcolor
    视图的背景颜色。在全景图像装载前的显示颜色;以及局部全景未覆盖区域的显示颜色。
  • 当设置为有效的十六进制色值时(例如:"0xFFFFFF"表达白色),那么一个使用该颜色的形状将作为背景在全景图后面呈现。
  • 未设置或设置无效时,则表现为透明,并且将显示FlashPlayer的默认背景色(在html文件中修改),当embedding设置中wmode="transparent"时将显示Html页面
  • 仅限Flash:当设置时,它允许在全景图像“外部”使用鼠标进行导航(例如使用局部全景图时),并且它允许不同尺寸局部全景之间的正确混合。
  • 浏览器信息

    变量名说明
    browser.useragentuser-agent 字符串。等同于js的 navigator.userAgent
    browser.platform在HTML5中为platform字符串,等同于js的 navigator.platform;在Flash中一直为“Flash”
    browser.location当前页面的完整url
    browser.domain当前页面域名(不含“www.”)
    浏览器信息。
  • 注:仅当使用默认的 embedding.js 时,以上变量才有效。
  • 设备信息

    变量名默认值说明
    device.flashfalsetrue表示为Flash模式
    device.flashversion Flashplayer版本号
    device.html5falsetrue表示为HTML5模式
    device.normalfalsetrue表示为桌面或平板环境
    device.desktopfalsetrue表示为桌面环境
    device.tabletfalsetrue表示为平板环境
    device.mobilefalsetrue表示为手机环境
    注意-desktop,mobile以及table为"三态"特性,意思是只能同时设置它们中的一个为true
    device.css3dfalsetrue表示CSS-3D有效(特指HTML5模式)
    device.webglfalsetrue表示WebGL有效(特指HTML5模式)
    device.multiressupportfalsetrue表示浏览器支持多重分辨率
    device.panovideosupportfalsetrue表示浏览器支持视频全景
    device.fullscreensupportfalsetrue表示支持全屏模式
    device.pixelratio1.0设备/浏览器的像素比率,等同于js中的window.devicePixelRatio
    device.fractionalscalingfalsetrue表示页面比例或像素比例被设置
    device.mousefalsetrue表示设备支持鼠标
    device.touchfalsetrue表示设备支持多点触控
    注意-鼠标和触控可以同时有效(比如带触摸屏的台式电脑)。
    device.iosfalsetrue表示iOS设备(iPhone,iPod,iPad)
    device.iosversion iOS的版本号(仅限iPhone,iPad,iPad)
    device.iphonefalsetrue表示iPhone设备(以及iPod Touch)
    device.ipodfalsetrue表示为iPod设备
    device.ipadfalsetrue表示为iPad设备
    device.androidfalsetrue表示Android设备
    device.androidversion Android版本号(仅HTML5)
    device.androidstockfalsetrue表示原生安卓浏览器
    device.chromefalsetrue表示Chrome浏览器(仅HTML5)
    device.chromemobilefalsetrue表示手机版Chrome浏览器(仅HTML5)
    device.chromeversion Chrome浏览器版本号(仅HTML5)
    device.firefoxfalsetrue表示为Firefox浏览器(仅HTML5)
    device.firefoxversion Firefox浏览器版本号(仅HTML5)
    device.iefalsetrue表示为IE浏览器(仅HTML5)
    device.ieversion IE浏览器版本号(仅HTML5)
    device.edgefalsetrue表示为Edge浏览器(仅HTML5)
    device.safarifalsetrue表示为Safari浏览器(仅HTML5)
    device.safariversion Safari浏览器版本号(仅HTML5)
    device.operafalsetrue表示为Opera浏览器(仅HTML5)
    device.operaversion Opera浏览器版本号(仅HTML5)
    device.standalonefalsetrue表示为独立Flashplayer
    device.windowsfalsetrue表示环境为Windows系统
    device.macfalsetrue表示环境为Mac OSX系统
    device.linuxfalsetrue表示环境为Linux系统
    示例
    if(device.html5, ...);
    if(device.flash, ...);
    if(device.android, if(device.flash, ...); );
    if(device.iOSversion GT 5.1, ...);

    定时/随机值(只读)

    变量名默认值说明
    idletime0.5设置当无人操作时,经过多少秒会触发 Onidle 事件
    timertick 从viewer开始到当前时刻经历的毫秒数
    random0.0 - 1.0返回一个0到1范围内的随机值
    示例-生成一个1到10之间的随机数
    mul(val, random, 9);
    add(val, 1);
    roundval(val);
    trace('random value=',val);

    数学常量

    变量名说明
    Math.PI圆周率π(3.141592)

    键盘/按钮移动

    变量名默认值说明
    hlookat_moveforce0.0小于0时向左旋转;大于0时向右旋转
    vlookat_moveforce0.0小于0时向上旋转;大于0时向下旋转
    fov_moveforce0.0小于0时放大;大于0时缩小
    当用键盘控制全景时,这些变量会返回不同的数值(0、1或-1)。可以在自已的程序代码中读取或设置它们,用来判断键盘操作状态或实现自动旋转的效果。
    旋转加速度、速度及刹车速度分别取决于control.keybaccelerate、control.keybspeed、control.keybfriction

    示例-自动向左旋转3秒后停止
    set(hlookat_moveforce,-1);
    delayedcall(3,set(hlookat_moveforce,0));

    多重分辩率信息

    变量名默认值说明
    multireslevel (只读)当前的层级数(范围:0到image.level.count-1)
    lockmultireslevel-1限定在某个层级,当为-1时取消限定
    downloadlockedlevelfalse为true时表示当前限定的层将被全部下载

    加载进度信息

    变量名默认值说明
    progress.progress0.0当前加载进度值(0.0~1.0),它可以用来制作自定义加载动画,使用 onxmlcomplete 事件来启动加载动画,在 onloadcomplete 事件中停止它,加载过程中通过该变量的值来影响进度显示内容。

    Xml/Scene

    变量名说明
    xml.url(只读)当前加载的xml文件路径
    xml.content(只读)当前xml文件的全部文本内容。当使用loadscene()方法加载一个场景后,该变量中的内容将仅为<scene>元素
    xml.scene(只读)当使用loadscene()方法加载一个场景后,该变量存贮着当前场景的名称
    xml.view(只读)保存当前xml或scene中<view>元素的一个备份。例如可以通过 xml.view.hlookat 来获取原始的 view.hlookat
    注意-这里仅存贮明确定义的值,不含默认值,这意味着,在使用它取值之前要选检查一下该是否存在。
    例如
    if(xml.view.fov !== null, ...);

    调试及错误处理

    变量名默认值说明
    debugmodefalse为true时显示调试跟踪 trace() 信息
    showerrorstrue当有错误发生时自动显示错误信息窗口
    lasterror (只读)用于在 onloaderror 事件中获取最近一次的出错信息
    haveexternalinterfacetrue(只读)用来检测扩展接口功能是否有效。尤其是在使用 openurl() 这个功能时,有必要使用该变量判断一下环境是否支持扩展接口。
    浏览在网络服务器上的全景时该变量始终为true(扩展接口始终有效),但是在本地的Flash模式下,只有在浏览器打开本地受信任文件夹中的Flash SWF文件,扩展接口才会有效。
    关于受信任文件夹管理,可以在Flasyplayer安全选项中进行。
    havenetworkaccesstrue(只读)该变量用来检查网络访问是否有效。这可以用来避免错误的发生,如在使用谷歌地图或必应地图时,如若没有网络,就会发生未知错误。
    浏览在网络服务器上的全景时该变量始终为true(网络访问始终有效),但是在本地的Flash模式下,只有在浏览器打开本地受信任文件夹中的Flash SWF文件,网络访问才会有效。
    关于受信任文件夹管理,可以在Flasyplayer安全选项中进行。

    层 (Flash only)

    变量名默认值说明
    image.layer (仅as3用法)pano image layer 的 Actionscript 3 Sprite 对象
    layer.enabled / plugin.enabledtrue使能所有图层或插件
    layer.visible / plugin.visibletrue让所有图层或插件可见或不可见(也支持HTML5)
    layer.alpha / plugin.alpha1.0设置所有图层或插件的透明度
    layer.layer / plugin.layer (仅as3用法)layer / plugin 的 Actionscript 3 Sprite 对象
    hotspot.enabledtrue使能所有热点
    hotspot.visibletrue让所有热点可见或不可见
    hotspot.alpha1.0设置所有热点的透明度
    hotspot.layer (仅as3用法)hotspot 的 Actionscript 3 Sprite 对象

    语法及使用


    • 语法格式:动作名(参数);
    • 动作名可以为以下几种:
      1. 内置的krpano动作名…
      2. 在xml任何地方定义的action元素名…
      3. 包含动作代码的变量/属性名。
    • 不在引号内(单或双引号字符)的空白字符(如空格,制表,新行)将被忽略。
    • 可以同时编写若干条动作,只需在每条动作尾部加上';'字符。
    • 动作将被逐条执行。
    • 在动作调用之间及参数之间的空白(如空格、tabs以及换行)将被忽略。
    • 参数数量取决于被调用的动作实体。
    • 参数之间需要使用逗号','来分开。
    • 要想在参数中使用空白或逗号,那么参数就需要用单引号或双引号进行封闭。
    • 所有给定参数都视为字符。当使用变量名作为参数时,不会被自动解析为对应值。一些动作可以自动处理变量名参数,但是那要依赖与动作体本身。要想使用变量作为参量来传递,必须使用get动作。注 - 一些动作可以自动解析变量参数的值,但这仅限少数动作的自身特性。

    表达式


    表达式将被使用在:if语句;条件循环(for,loop)语句;和 calc 动作中。用于判断逻辑条件是否成立,计算数学表达式或拼接字符串。

    • 基本语法:a 操作符 b
    • 其中a或b项可以是变量,值或字符串。
    • 操作符可以是下表罗列之一。
    • 运算顺序取决于具体的操作符,但在等价操作符内运算顺序是从左向右。
    • 可以使用括号实现一个自定义运算顺序 - 例如:(a 操作符 b)操作符(c 操作符 d)

    数组


    动作/函数参考


    程序逻辑/流程控制

    语句语法
    defdef(variable, type, value*)
    用途

    定义一个变量或对象

    参数
    • variable
      1. 变量名
      2. 如果不存在,该变量将被创建
    • type
      1. 指定变量的类型
      2. 变量类型包括:
        • boolean - true 或者 false
        • number - 数字类型(含整数和小数)
        • integer - 整数类型
        • string - 字符类型
        • object -包含属性的对象类型
    • value(可选参数)
      1. 该变量的初始值
      2. 当未附初始值并且变量已存在时,那么该变量的当前值将被转换成给定的类型
      3. 当未附初始值并且变量不存在时,那么默认的初始值自动为以下内容:
        • boolean=false
        • number=NaN(表示 Not a Number)
        • integer=0
        • string=null
      4. 对象类型不能指定初始值
    示例
    def(b, boolean, true);
    def(n, number, 123.456);
    def(s, string, '全景大师');
    //以下三句定义一下对象,对为该对象设置类型为number的x和y属性
    def(obj, object);
    def(obj.x, number, 0.0);
    def(obj.y, number, 0.0);
    语句语法
    setset(variable, value)
    setset(object, variable:type=value, variable:type=value, …)
    用途

    为指定的变量设置给定的值

    参数
    • object
      1. 将被设置成员变量的元素,如图层layer[]或热点hotspot[]
      2. 如果该object不存在,它将被自动建立
      3. 可以用来在指定域内定义变量,如global或local
    • variable
      1. 指定的变量名称
      2. 变量不存在时将被自动建立
    • type(可选项)
      1. 指定变量的类型
      2. 变量类型包括:
        • boolean - true 或者 false
        • number - 数字类型(含整数和小数)
        • integerint - 整数类型
        • string - 字符类型
    • value
      1. 给定的变量新值
      2. 当指定的变量已存在,那么该值将被转换为该已存在变量的类型
      3. 注意- 当这里为某个变量名称时,不会从该名称所表示变量自动取值,应该使用get(variable)来取变量值
    示例
    set(var1, '您好');
    set(var2, get(var1));
    set(fullscreen, true);
    set(layer[p1].visible, false);
    set(hotspot[h1].scale, 2.5);
    set(contextmenu.item[0].caption, '欢迎访问');
    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)
    );
    语句语法
    getget(variable)
    用途

    获取给定变量的实际值

    1. 为动作提供实参
      action( get(variable), … )
    2. 为元素数组提供实际下标值
      array[ get(variable) ]
    3. 为xml元素属性获取变量值
      <xmlelement attribute=“get:variable” … />
    参数
    • variable
      • 任意变量
      • 当变量不存在时,get()将返回 null 值

    注意- 个别内置动作会自动获取参数中变量名对应的实际值,这时就无需使用 get() 语句。比如 add() sub() mul()等

    示例
    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));
    语句语法
    calccalc(variable*, expression)
    用途

    解析表达式的值

    1. 解析表达式的值并存入变量中
      calc(variable, expression)
    2. 为动作提供实参
      action( calc(expression), … )
    3. 为元素数组提供实际下标值
      array[ calc(expression) ]
    4. 为xml元素属性获取变量值
      <xmlelement attribute=“calc:expression” … />
    参数
    • variable
      • 存贮表达式值的变量
        如果变量不存在则自动创建
    • expression
      • 数学或逻辑表达式
    示例
    set(y_new, calc(y_old - offset1 + offset2));
    set(animationtime, calc('%1' == 'instant' ? 0.0 : 0.5));
    <layer url="calc:'%CURRENTXML%/skin/' + settings.image1" />
    语句语法
    copycopy(destination, source)
    用途

    将原变量(source)中的值复制到目标变量(destination)中
    当两个变量类类型不同时,原变量的值将被转换成目标变量的类型

    copy()动作的同效语句为 set(destination, get(source));

    参数
    • destination
      • 目标变量,如若不存在则自动创建
    • source
      • 原变量,如若不存在,刚会将 null 值复制到目标变量中。
    示例
    copy(dstvar, srcvar);
    copy(cur_hlookat, view.hlookat);
    copy(layer[text].x, mouse.x);
    copy(layer[text].y, mouse.y);
    语句语法
    deletedelete(variable, …*)
    用途

    移除给定的变量

    参数
    • variables
      • 任意变量名
      • 充许同时移除多个变量,变量之间使用逗号(,)分开即可
    示例
    set(tmp1, ...);
    set(tmp2, ...);
    ...执行其它语句...
    delete(tmp1, tmp2);
    语句语法
    2~3个参数if(条件, then动作, else动作*)
    更多参数if(条件1, 动作1, 条件1, 动作2, … 其它情况时动作*)
    用途

    条件成立时执行相应 then语句,否则执行 else语句

    参数
    • 条件
      • 逻辑表达式
    • then动作
      • 条件表达式成立(true)时执行的动作
    • else动作(可选参数)
      • 条件表达式不成立(false)时执行的动作
    示例
    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(不存在名为 spot1 的热点));
    if((varA GT 5) AND (varA LT 10),
        trace('varA 在 5 到 10 之间')
      );
    if(varA AND varB AND varC, trace('所有变量值均为 true') );
    //如果var1大于var2就转到水平100度,垂直20度,视野50度的视区上 
    //否则就旋转到场景的起始视区并以100度视野观看
    if(var1 GT var2,
        trace('条件成立!(表达式值为true)');
        lookto(100,20,50);
      ,
        trace('条件不成立!(表达式值为false)');
        lookto(0,0,100);
      );
    //下面是更复杂的表达式
    if(a*2+b GT (c+3)*1.5 OR teststring == '123', ...);
    //4个或4个以上参数时(多条件)
    if(
        test == 1, trace('test is 1'),
        test == 2, trace('test is 2'),
        test == 3, trace('test is 3'),
        trace('test is someting else')
    )
    语句语法
    ifnotifnot(条件, then语句, else语句*)

    逻辑上与 if 相反,用法相同。

    语句语法
    delayedcalldelayedcall(id*,delay,actions)
    用途

    延时给定的时间后调用或执行指定的动作

    参数
    • id(可选)
      • 为该动作指定一个唯一的标识 ID ,这样一来,就可以通过 stopdelayedcall(id) 来取消该延时动作的执行
    • delay
      • 给定的延时秒数
    • action
      • 延时时间到时所需执行的动作
    示例
    delayedcall(5.0, hidelogo() );
    delayedcall(10, looktohotspot(spot1);loadpano(pano2.xml); );
    delayedcall(1, showtext('您好!'););
    delayedcall(4, showtext('欢迎访问'); );
    //下面这个updatemousepos动作通过递归方式不断更新cursor这个层的位置
    //以实现让cursor这个层跟随鼠标移动
    <action name="updatemousepos">
      copy(layer[cursor].x, mouse.x);
      copy(layer[cursor].y, mouse.y);
      delayedcall(0.02, updatemousepos() );
    </action>
    语句语法
    stopdelayedcallstopdelayedcall(id)
    用途

    取消并停止指定id的延时动作

    参数
    • id
      • 使用该 id 作为标识的那个延时动作将被停止
    示例
    //下面是一个自定义事件,该自定义事件目的是在首次呈现场景时
    //延时5秒后隐藏一个介绍图片层,当移除该场景时同时取消该动作
    //这样就确保该介绍图片仅在全景展示前呈现5秒时间
    <events name="introimage_events"
            onnewpano="delayedcall(introimage, 5.0, hide_introimage() );"
            onremovepano="stopdelayedcall(introimage);"
            />
    语句语法
    nextticknexttick(actions)
    用途

    在当前动作体(一个action元素结点内的动作集)执行完成后立即执行指定的动作

    参数
    • actions
      • 将被执行的动作或动作集合
    示例
    //执行以下动作会先显示"测试nexttick"
    <action name="nexttick_test">
    showlog();
    nexttick(trace("这是nexttic中k的动作!");
    trace("测试nexttick");
    </action>
    语句语法
    callwhencallwhen(condition, actions)
    用途

    当表达式(condition)值为 true 会执行指定的动作(actions)
    若表达式的值此时不为 true ,那么该语句动作会一直等待,直到值为 true 并执行指定的动作

    参数
    • condition
      • 逻辑表达式
      • 该语句会逐帧检查该表达式的值,直到为 true 时才停止检查
    • actions
      • 表达式为 true 时要执行的动作

    注意- 与 if() 语句主要不同是,callwhen() 具有充许滞后特性,这里强调的是当表达式的值变为true时才执行且仅执行一次

    示例
    //当视频加载完成时就播放
    callwhen(plugin[video].loaded, plugin[video].playvideo(...); );
    //当地图加载完成时就设置地图中心点
    callwhen(plugin[maps].loaded, plugin[maps].setcenter(...); );
    语句语法
    forfor(startactions, condition, nextactions, loopactions)
    用途

    For 循环
    首先执行起始动作(startactions),然后检查表达式(condition),若值为 true 则执行要循环的动作(loopactions),每执行一次循环动作就执行一次步进动作(nextactions),然后再检查表达式的值,若为 true 则继续执行循环动作…直到表达式为 false 时终止循环

    参数
    • startactions
      • 循环开始时的初始动作
    • condition
      • 逻辑表达式
    • nextactions
      • 每次循环动作结束后要执行的动作
    • loopactions
      • 每次检查表达式值为 true 时要循环执行的动作
    示例
    //显示0到9这十个数字
    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);
    );  
    语句语法
    looploop(condition, loopactions)
    asyncloopasyncloop(condition, loopactions, doneactions*)
    用途

    只要表达式(condition)值为 true 则一直执行循环动作(loopactions)
    对于 loop() 语句,只有当循环体执行结束后才会执行后续的其它动作;而 asyncloop() 则是在循环期间继续其它事件和动作,只是在当表达式为 true 时就每帧执行一次循环动作(loopactions),asyncloop() 循环结束后还可以执行可选的完成动作(doneactions)

    参数
    • condition
      • 逻辑表达式
    • loopactions
      • 表达式为 true 时一直执行的动作
    • doneactions(可选)
      • asyncloop()中的表达式为 false 循环结束时执行的动作
    示例
    ondown="asyncloop(pressed, layer[scrollarea].scrollby(+2,0) );"
    onover="asyncloop(hovering, updatemousepos(), hideinfo() );"
    asyncloop(true, framehandler() );
    语句语法
    setintervalsetinterval(id, delay, actions)
    clearintervalclearinterval(id)
    用途

    定时器
    按给定的时间定时重复执行指定的动作

    参数
    • id(可选)
      • 定时器的唯一 id
      • 该 id 可以用过通过 clearinterval(id) 来实现停止操作
    • delay
      • 定时器的间隔秒数
    • actions
      • 定时重复执行的动作
    示例
    setinterval(time, 1.0, 
        jsget(time, (new Date()).toLocaleTimeString(); );
        trace('现在时刻=',time);
      );
    <events onkeydown="setinterval(get(keycode), 0.1, trace(keycode); );"
            onkeyup="clearinterval(get(keycode));"
            />
    语句语法
    toggletoggle(variable)
    用途

    针对指定逻辑变量的值,在 true 和 false 之间切换

    参数
    • variable
      • 将被切换值的逻辑变量
    示例
    toggle(fullscreen);
    toggle(layer[button1].visible);
    语句语法
    switchswitch(variable)
    switchswitch(variable, value1, value2, …)
    用途

    转变变量的值
    如果仅给一个变量,没有 value 参数,此时等效于 toggle() ,变量将在 true 与 false 之间变换
    如果给定两个或更多的 value 参数,那么将依次从左到右转变 variable 的值

    参数
    • variable
    • value1、value2、…(可选)
    示例
    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));
    语句语法
    breakbreak()
    用途

    中断或停止当前的动作
    当在 for()循环或 loop()循环中使用时,将仅停止循环自身

    语句语法
    callwithcallwith(caller, actions)
    用途

    可以使用指定的 plugin/layer 或 hotspot 作为调用者,用于直接访问这些元素的属性或事件

    参数
    • caller
      • 该元素将作为调用者
      • 只能使用 plugin/layer 或 hotspot 元素
    • action
      • 任意动作语句
      • 这些语句将在调用者的语境中执行,这意味着可以直接访问元素的属性和事件
    示例
    //这里的onclick实际是指 layer[test].onclick();
    callwith(layer[test], onclick);
    callwith(layer[test], trace('test pos=',x,'/',y); );
    //其中的alpha是指layer[test].alpha
    callwith(layer[test], tween(alpha, 0.0); );
    语句语法
    events.dispatchevents.dispatch(eventname, instantly*)
    用途

    从所有<events>元素中执行指定的事件

    参数
    • eventname
      • 事件名称
    • instantly(可选)
      • 为 true 或 false,默认为 false
      • 当设置为 true 时,指定事件将立即执行,否则要在当前动作体执行完后再执行
    示例
    <events name="events1" myevent="trace(events1...);" />
    <events name="events2" myevent="trace(events2...);" />
    ...
    events.dispatch(myevent);

    数学运算及函数

    语句语法
    addadd(variable, valueA, valueB*)
    subsub(variable, valueA, valueB*)
    mulmul(variable, valueA, valueB*)
    divdiv(variable, valueA, valueB*)
    modmod(variable, valueA, valueB*)
    powpow(variable, valueA, valueB*)
    用途

    数学运算
    充许使用两到三个参数

    参数
    • 两个参数的情况
      • add(dst,val1) 等效于 dst = dst + val1
      • sub(dst,val1) 等效于 dst = dst - val1
      • mul(dst,val1) 等效于 dst = dst * val1
      • div(dst,val1) 等效于 dst = dst / val1
      • mod(dst,val1) 等效于 dst = dst % val1
      • pow(dst,val1) 等效于 dst = dst ^ val1
    • 三个参数的情况
      • add(dst,val1,val2) 等效于 dst = val1 + val2
      • sub(dst,val1,val2) 等效于 dst = val1 - val2
      • mul(dst,val1,val2) 等效于 dst = val1 * val2
      • div(dst,val1,val2) 等效于 dst = val1 / val2
      • mod(dst,val1,val2) 等效于 dst = val1 % val2
      • pow(dst,val1,val2) 等效于 dst = val1 ^ val2

    提示-var1与var2可以是具体的值也可是变量,当为变量时,会自动使用它们的真实值

    • variable
      • 保存计算结果的变量
      • 当该变量不存在时,将被自动创建
    • valueA / valueB(可选)
      • 参于运算的值或变量
    示例
    set(val, 1);
    add(val, 1);
    trace('val should be 2: val=',val);
    mul(doublewidth, width, 2.0);
    mul(scale, 0.5);
    div(result, vala, valb);
    add(dst,rotate,360); tween(rotate,get(dst),5);
    add(xpos, mouse.x, mouse_x_offset);
    sub(destx, stagewidth,  destwidth);
    div(aspect,16,9);
    mod(cur_hlookat,cur_hlookat,360);
    pow(sqrt,val,0.5);
    语句语法
    incinc(variable, byvalue*, max*, min*)
    decdec(variable, byvalue*, max*, min*)
    用途

    让指定的变量增加或减小一定的值

    参数
    • variable
      • 指定的变量
    • byvalue
      • 增加或减少的量
      • 如果无该参数,指定的量将被增加或减小 1
    • max / min
      • 限定指定变量的最大值和最小值
      • 当指定的变量达到其中一个限制时,该变量将被设置为另一个限制的值。这可以用来让指定的变量落在一定的范围或夹限在特定区域(使用 min=max)
    示例
    inc(i);
    inc(frame,1,get(lastframe),0);
    inc(ypos,30);
    inc(view.hlookat, 2, 90, 90);
    语句语法
    clampclamp(variable, min, max)
    用途

    裁剪指定变量的上下限

    参数
    • variable
      • 欲被裁剪的变量
    • min
      • 最小值 - 当指定的变量小于该值时,将被设置与该值相同
    • max
      • 最大值 - 当指定的变量大于该值时,将被设置与该值相同
    示例
    clamp(percent, 0, 100);
    screentolayer(bar, mouse.stagex,mouse.stagey, lx,ly);
    div(fill, lx, layer[bar].pixelwidth);
    mul(fill, 100);
    clamp(fill, 0, 100);
    txtadd(layer[barfill].width, get(fill), '%');
    语句语法
    MathMath.*
    用途

    Math对象提供一些用于数学运算的常量和动作
    大部份 Math 动作都有两种使用方式:一是只提供一个变量作为参数,此时该参数即是运算对象,同时又是运算后结果的存贮变量;二是提供两个参数,前一个用于存贮结果,后一个为运算对象

    1. Math.PI
      • 圆周率的数学常量(3.141592)
    2. Math.abs(var) or Math.abs(result,v)
      • 计算绝对值
    3. Math.acos(var) or Math.acos(result,v)
      • 计算反余弦值(弧度)
    4. Math.asin(var) or Math.asin(result,v)
      • 计算反正弦值(弧度)
    5. Math.atan(var) or Math.atan(result,v)
      • 计算反正切值(弧度)
    6. Math.atan2(result,a,b)
      • 计算两个变量a和b的反正切值(弧度)
      • 它类似于计算的a / b的反正切,所不同的是这两个参数的符号被用来确定结果的象限
    7. Math.ceil(var) or Math.ceil(result,v)
      • 返回大于或小于 var 的最小整数
    8. Math.cos(var) or Math.cos(result,v)
      • 计算余弦(弧度参数)
    9. Math.exp(var) or Math.exp(result,v)
      • 返回e的指定次幂
    10. Math.floor(var) or Math.floor(result,v)
      • 返回小于或等于指定数字的最大整数
    11. Math.log(var) or Math.log(result,v)
      • 返回指定数字的对数
    12. Math.max(var,var2) or Math.max(result,…vars)
      • 返回两个数字中较大的一个
    13. Math.min(var,var2) or Math.min(result,…vars)
      • 返回两个数字中较小的一个
    14. Math.pow(var,var2) or Math.pow(result,v1,v2)
      • 返回指定数字的指定次幂
    15. Math.round(var) or Math.round(result,v)
      • 将值舍入到最接近的整数或指定的小数位数
    16. Math.sin(var) or Math.sin(result,v)
      • 返回指定角度的正弦值
    17. Math.sqrt(var) or Math.sqrt(result,v)
      • 返回指定数字的平方根
    18. Math.tan(var) or Math.tan(result,v)
      • 返回指定角度的正切值

    数字/字符格式化

    语句语法
    roundvalroundval(variable, decimalplaces*)
    用途

    四舍五入

    参数
    • variable
      • 指定的变量
    • decimalplaces(可选)
      • 保留小位点位数,无此参数时表示不保留小数位(取整)
    示例
    roundval(val);
    roundval(val,2);
    copy(cur_hlookat,view.hlookat);
    mod(cur_hlookat,360);
    roundval(cur_hlookat,2);
    copy(cur_vlookat,view.vlookat);
    roundval(cur_vlookat,2);
    txtadd(msg,'looking at ',get(cur_hlookat),'/',get(cur_vlookat));
    语句语法
    tohextohex(variable, prefix*, length*)
    用途

    将给定的变量转换为十六进制字符串
    可以用来生成 html/css 的色值字串

    参数
    • variable
      • 给定的变量
    • prefix(可选)
      • 前导字符(如 '0x' 或 '#')
    • length(可选)
      • 返回值的长度
    示例
    tohex(color,'#',6);
    set(color, ...an_external_integer_input...);
    tohex(color,'#',6);
    txtadd(layer[text1].css,'color:',get(color),';');
    语句语法
    tolowertolower(variable)
    touppertoupper(variable)
    用途

    将给定的变量转换为大写或小写

    参数
    • variable
      • 给定的变量
    示例
    set(str,"vrmaster");
    toupper(str);
    //显示为 VRMASTER
    trace(str);
    语句语法
    txtaddtxtadd(destination, txt1, txt2*, txt3*, …)
    用途

    字符串连接
    若只有两个参数,则将第二个参数中的字符连接到目标变量(destination)的后面。多于两个参数时,则是将从每二个参数开始的所有参数依次连接在一起,并存贮到目标变量中

    参数
    • destination
      • 用于存贮连接结果的目标变量
      • 该变量不存在时将被自动创建
    • txt1,txt2,txt3,…(可选)
      • 将被连接到一起的字符串
      • 当只有一个txt参数时,该txt将被直接连接到当前目标变量(destination)的尾部
      • 如果使用变量作为txt参数,一定要用get()来获取该变量的实际值
    示例
    txtadd(picfilename,'%CURRENTXML%/pic_',get(pic),'.jpg');
    txtadd(crop,'0|',get(ypos),'|333|285');
    txtadd(pname, 'thumbbar_image_', get(i));
    txtadd(layer[text].html,'[p]',get(data[txt1].content),'[/p]');
    txtadd(msg,get(view.fovtype),'=',get(fov),'°');
    语句语法
    subtxtsubtxt(dstvar, srcvar, startpos, len)
    用途

    从字符串提取局部子串

    参数
    • dstvar
      • 用于存贮所提取子串的目标变量
      • 如果该变量不存在则会被自动创建
    • srcvar
      • 来源字符串的变量
    • startpos
      • 子串在源字符串中的起始位置
    • len
      • 欲提取子串的长度
    语句语法
    indexoftxtindexoftxt(index, txt, searchtxt, startindex*)
    用途

    返回搜索字符(searchtxt)在字符串(txt)中的起始位置(index)

    参数
    • index
      • 用于存贮返回值的变量
      • 若返回 -1 则表示搜索字符串(searchtxt)不存在字符串(txt)中
      • 如果该变量不存在则自动创建
    • txt
      • 源字符串
    • searchtxt
      • 欲搜索的子字符串
    • startindex(可选)
      • 指定从源字符串的搜索子串时的起始位置(默认为0)
    语句语法
    txtreplacetxtreplace(var, searchtext, replacetext)
    txtreplacetxtreplace(dstvar, srcvar, searchtext, replacetext)
    用途

    用字符串replacetext替换源字符串var/srcvar中的searchtext字符串

    参数
    • var / srcvar / dstvar
      • 用于搜索的源字符串变量(var, srcvar)以及用于存贮返回结果的变量(var, dstvar)
      • 如果该变量不存在则自动创建
    • searchtxt
      • 将要被替换掉的旧字符串
    • replacetxt
      • 欲替换旧字符串的新字符串
    语句语法
    txtsplittxtsplit(string, separator, resultingarray)
    txtsplittxtsplit(string, separator, var1, var2, …)
    用途

    字符串分割

    参数
    • string
      • 欲分割的字符串,可以为实际的字符或字符串变量
    • separator
      • 分割标记字符
    • resultingarray当用三个参数使用txtsplit()时
      • 用于存贮分割结果的数组变量名,分割的字符逐个放个该数组成员的'value'属性中
    • var1,var2,…当用四个或更多参数使用txtsplit()时
      • 分割出来的字符串将依次存入这些给定的变量中
    示例
    //分割字符并存入a,b,c三个变量中:
    txtsplit('1|2|3', '|', a, b, c);
    trace('a=',get(a), ' b=',get(b), ' c=',get(c));
    //返回值:a=1 b=2 c=3
    //分割字符并存入数组变量:
    txtsplit('x|y|z', '|', arr);
    for(set(i,0), i LT arr.count, inc(i),
      trace('arr[',get(i),'].value=',arr[get(i)].value);
    );
    //返回值:
    //arr[0].value=x
    //arr[1].value=y
    //arr[2].value=z
    语句语法
    fromcharcodefromcharcode(var, charcode)
    用途

    将一个Unicode字符编码值转换为字符并存入变量(var)中

    参数
    • var
      • 用于存贮转换结果的变量
    • carcode
      • Unicode字符编码值(如:全=20840;景=26223;大=22823;师=24072)
    语句语法
    escapeescape(var)
    escapeescape(var, text)
    unscapeunscape(var)
    unscapeunscape(var, text)
    用途

    对字符串进行编码、解码

    参数
    • var
      • 无 text 参数时 - 该变量自身将被编码或解码
      • 有 text 参数时 - 该变量将用来存贮 text 编码或解码后的字符
    • text(可选)
      • 将被编码或解码的字符串

    动画效果

    语句语法
    tweentween(variable, value, time*, tweentype*, donecall*, updatecall*)
    用途

    补间动作,通过动态改变指定变量值实现动画效果
    颜色支持 当指定的变量名中含有'color'这个关键字时,那么它的值将自动解析为32位的ARGB色值并且单独处理每个颜色通道
    多变量支持 可以同时处理多个变量,这时要使用'|'来分隔这些变量(variable)、值(value)和被间动作类型(tweentype),当变量有多个,而只有一个值或补间类型时,那么所有变量将使用相同补间动作类型或被转变到相同的值,并且对于所有变量来说,time、donecall以及updatecall也都是相同的

    参数
    • variable
      • 将被改变的变量
      • 使用|字符来分隔多个变量
      • 当变量名中含有关键字'color'时,变量值将被处理为32位的ARGB色值
    • value
      • 变量的目标值
      • 若值前面有'%'字符,将按百分比方式处理
      • 使用|字符来分隔多个变量对应的不同值
      • 当使用变量来作为value参数时,需使用 get() 动作来获取变量的实际值
    • time(可选)
      • 从当前值改变到目标值所需秒数(默认 0.5 秒)
      • 还可以通过 distance() 语句来动态指定时间(不支持多变量补间),distance()的原理是通过设置指定值域变化的最大时间来动态设置本次补间所需的实际时间,这样一来,对于变化量小的补量则用时短;相反对于变化量大的补间则用时就长,主要是改善用户体验。
        下面是 distance() 语句用法
        • distance(dvalue,dtime)
          • dvalue - 值变化的区间
          • dtime - 值在区间内变化完成需要时间
    • tweentype(可选)
      • 补间动作的插值计算类型(默认 easeOutQuad )
      • 更多补间动作类型:tweentypes
    • donecall(可选)
      • 当补间动作完成且指定变量已达到目标值时,执行本参数中的动作
      • 除了常规动作,还可以在这里使用特殊关键字 WAIT ,在这种情况下,用户界面以及后续的动作将被阻止,直到指定变量达到目标的值
    • updatecall(可选)
      • 指定变量在每一次(每一帧)更新时,都会执行该参数中动作
      • 警告- 谨慎使用!会增加系统负担拖慢帧速率


    关于'补间'名词出处的一些信息 - Wikipedia about Tweening.

    示例
    tween(scale,2);
    tween(rotate,90);
    tween(width,50%);
    onover="tween(alpha,0.7,distance(0.3,0.2));"
    onout="tween(alpha,1.0,distance(0.3,0.2));"
    set(alpha,0);
    set(visible,true);
    tween(alpha, 1.0 ,0.3);
    tween(layer[logo].width, get(destwidth));
    set(layer[image].enabled,false);
    tween(layer[image].alpha,0.0,0.5,default,removeplugin(image));
    set(view.stereographic,true);
    tween(view.vlookat, 90.0, 2.0);				
    tween(view.fisheye, 1.0, 2.0);
    tween(view.fov, 150.0, 2.0);
    语句语法
    stoptweenstoptween(variable, …)
    用途

    停止当前运行中的补间动作

    参数
    • variable
      • 当前正在对该变量进行补间操作的动作将被停止
    • … variable, variable, …(可选)
      • 将被停止补间的其它的变量
    示例
    ondown="tween(layer[text].y, 10, distance(400,0.7), linear);"
    onup="stoptween(layer[text].y);"
    tween types

    用于补间动作的所有插值算法类型

    • 线性渐变
      1. linear
    • 渐出
      1. easeOutQuad
      2. easeOutQuart
      3. easeOutQuint
      4. easeOutSine
      5. easeOutBounce
      6. easeOutCirc
      7. easeOutCubic
      8. easeOutExpo
      9. easeOutBack
    • 渐入
      1. easeInQuad
      2. easeInQuart
      3. easeInQuint
      4. easeInSine
      5. easeInBounce
      6. easeInCirc
      7. easeInCubic
      8. easeInExpo
      9. easeInBack
    • 渐出后渐入
      1. easeOutInQuad
      2. easeOutInQuart *
      3. easeOutInQuint *
      4. easeOutInSine *
      5. easeOutInBounce *
      6. easeOutInCirc *
      7. easeOutInCubic *
      8. easeOutInExpo *
    • 渐入后渐出
      1. easeInOutQuad *
      2. easeInOutQuart *
      3. easeInOutQuint *
      4. easeInOutSine *
      5. easeInOutBounce *
      6. easeInOutCirc *
      7. easeInOutCubic *
      8. easeInOutExpo *

    关于这些渐变类型的在线介绍:
    http://hosted.zeh.com.br/tweener/docs/en-us/misc/transitions.html
    http://hosted.zeh.com.br/mctween/animationtypes.html

    带*号的这些类型仅在使用 mortweentypes 插件时有效

    动态加载其它场景

    语句语法
    loadpanoloadpano(xmlpath, vars*, flags*, blend*)
    loadxmlloadxml(xmlstring, vars*, flags*, blend*)
    loadsceneloadscene(scenename, vars*, flags*, blend*)
    用途

    加载一个新的全景

    注意- 只有具备 keep=“true” 属性的图层、插件、热点、事件和光晕元素在新场景中才被保留

    参数
    • xmlpath( 针对 loadpano)
      • 将要被装载的全景xml文件路径或url(没有xml文件时使用null来替代)
      • 当使用相对路径时,将会从 basedir 目录寻找并加载文件,basedir的默认值为 %FIRSTXML%,这意味着在loadpano中使用相对路径时,将全部以第一个载入的xml文件所在路径为基准
    • xmlstring( 针对 loadxml)
      • 欲装载的xml文件内容(需预先编码)
    • scenename( 针对 loadscene)
      • 待载入的<scene>元素的名称
    • var(可选)
      • 设置自定义变量(如没有就使用null替代)
      • 这些变量将在xml内容解析完成并且在加载全景图像之前被植入,这样一来,就可以重写或添加原先xml中的设置项
      • 变量定义方式: var1=val1,各值对之间使用 &amp; 分隔
    • flags(可选)
      • 加载时的附加标识(如没有就使用null替代)
      • 多个标识使用'|'分隔
      • 有效的标识符:
        1. MERGE(推荐)
          • 将当前场景与将载入场景中的所有设置进行合并
          • 如果新场景中某些被保持的插件和热点与当前场景中的同名,那么这些新元素将不被载入
          • 这是全景漫游的推荐方式
        2. KEEPVIEW - 保持当前视图中的设置
        3. KEEPMOVING - 在混合期间保持移动(仅支持HTML5)
        4. KEEPSCENES - 保持当前场景(仅适用于 loadpano())
        5. KEEPDISPLAY - 保持当前的显示设置
        6. KEEPCONTROL - 保持当前的控制设置
        7. KEEPPLUGINS - 保持当前已载入的插件
        8. KEEPHOTSPOTS - 保持当前已载入的热点
        9. NOPREVIEW - 忽略新xml中的<preview>标签
        10. KEEPBASE - 预定义标识集合:
          KEEPDISPLAY | KEEPCONTROL | KEEPPLUGINS
        11. KEEPALL - 预定义标识集合:
          KEEPVIEW | KEEPDISPLAY | KEEPCONTROL | KEEPPLUGINS
        12. REMOVESCENES - 删除所有当前定义的场景元素(类似于 - set(scene.count,0);)
        13. IGNOREKEEP - 忽略keep标识并删除使用keep=“true”的元素
    • blend(可选)
      • 以动画过渡方式混合渐变呈现新的场景
      • 有效的混合模式:
        1. NOBLEND - 不混合直接切换到新场景(这是默认方式)
        2. BLEND(time, tweentype) - 以交叉融合方式从当前场景进入新场景
          • time - 混合的时间秒数(默认2秒)
          • tweentype - 混合运动曲线形状(默认为 easeInCubic)
        3. COLORBLEND(time, color, tweentype) (WebGL only) - 混合为一种颜色后再从该颜色进入新场景
          • time - 混合的时间秒数(默认2秒)
          • color - 十六进制色值(默认为 0x000000 黑色)
          • tweentype - 混合运动曲线形状(默认为 easeOutSine)
        4. LIGHTBLEND(time, color, colorscale, tweentype)(WebGL only) - 增强或削减为一种颜色然后融合到新场景
          • time - 混合的时间秒数(默认2秒)
          • color - 十六进制色值(默认为 0xFFFFFF 白色)
          • colorscale - 颜色的缩进比率,负值表示消减(默认为 2.0)
          • tweentype - 混合运动曲线形状(默认为 easeInCubic)
        5. SLIDEBLEND(time, angle, smooth, tweentype)(WebGL only) - 动画方式滑动到新场景
          • time - 混合的时间秒数(默认2秒)
          • angle - 滑动方向角度:0.0=从右到左;90=从顶到底;135=从左上角到右下角(默认为0.0-从右到左)
          • smooth - 动画平滑度(0.0到1.0 默认为0.2)
          • tweentype - 混合运动曲线形状(默认为 linear)
        6. OPENBLEND(time, shape, smooth, zoom, tweentype)(WebGL only) - 以形状开口动画方式进入新场景
          • time - 混合的时间秒数(默认2秒)
          • shape - 开口形状:0.0=圆形;-0.5=椭圆;-1.0=垂直;+1.0=水平 (默认 0.0-圆形)
          • smooth - 动画平滑度(0.0到1.0 默认为0.2)
          • zoom - 同时放大当前场景,更有动感(0.0到1.0 默认为0.2)
          • tweentype - 混合运动曲线形状(默认为 linear)
        7. ZOOMBLEND(time, zoom, tweentype)(Flash or WebGL only) - 放大当前视图并融合到新场景
          • time - 混合的时间秒数(默认2秒)
          • zoom - 缩放因子(默认 2.0)
          • tweentype - 混合运动曲线形状(默认为 easeInOutSine)

    效果体验:Blend效果 源码:XML

    注意- 当选定的混合模式不被环境支持时(例如在Flashplayer下使用仅支持WebGL的模式),那么将自动回退到默认的混合方式(NOBLEND)

    示例
    loadpano(pano2.xml);
    loadpano(pano2.xml, null, MERGE, BLEND(1));
    loadscene(scene1);
    loadscene(scene1, null, MERGE, BLEND(1));
    loadxml('<krpano><image><sphere url="pano.jpg"/></image></krpano>');
    loadxml(get(data[xml].content), null, KEEPALL);
    loadpano('%SWFPATH%/pano.xml', null, MERGE, BLEND(2));
    loadpano(sphere.xml, image.hfov=1.0&view.limitview=fullrange);
    语句语法
    openurlopenurl(url, target*)
    用途

    打开一个url链接

    参数
    • url
      • 待打开的url
    • target(可选)
      • _blank - 在新窗口中打开(默认)
      • _self - 在当前窗口的当前帧中打开
      • _parent - 在当前帧的父窗口中打开
      • _top - 在当前窗口的顶层帧中打开

    Flash模式时要注意 - 该动作需要Flashplayer的扩展接口支持,它只在浏览器内部有效,当工作在离线或使用“file:“本地url浏览时就需要对Flashplayer进行安全设置

    示例
    openurl('http://krpano.com',_self);
    openurl('help.html');

    改变视角

    语句语法
    lookatlookat(h, v, fov*, distortion*, architectural*, pannini*)
    用途

    观看全景的指定位置

    参数
    • h - 球面坐标中的水平方向角度(-180 到 +180)-view.hlookat
    • v - 球面坐标中的垂直方向角度(-90 到 +90)-view.vlookat
    • fov(可选) - 视域度数(0 到 179)-view.fov
    • distortion (可选) - 鱼眼扭曲设置 -view.distortion
    • architectural (可选) - 建筑投影设置 -view.architectural
    • pannini1)(可选) - pannini投影设置 -view.pannini
    示例
    lookat(0,0);
    lookat(0,0,90);
    loadpano(pano.xml);
    lookat(45.1, -20.2, 110.0);
    语句语法
    looktolookto(toH,toV,fov*,motiontype*,shortestway*,nonblocking*,donecall*)
    looktohotspotlooktohotspot(hotspotname*, fov*, motiontype*, shortestway*)
    movetomoveto(toH, toV, motiontype*)
    zoomtozoomto(fov, motiontype*)
    用途

    将视图从当前位置移动给定的位置
    注意- 在移动期间所有用户界面及其它动作都将被阻塞,这意味着其它动作只能在当前动作完成后才能执行。可以使用 oninterrupt() 来充许用户中断该动作

    参数
    • toH
      • 目标的水平位置(-180 到 +180)
    • toV
      • 目标的垂直位置(-90 到 +90)
    • hotspotname针对looktohotspot (可选)
      • 热点名称
      • 将使用此热点的位置(ath/atv)作为目标位置
      • 当从一个热点元素中的调用 lookathotspot()时,如果没有输入此参数,那么就默认特指这个热点本身
    • fov(可选)
      • 目标视域(0 到 179)
      • 当没有设置该参数时,lookathotspot()动作会自动将自身大小作为fov,其它动作将保持当前fov值
    • motiontype(可选)
      • 运行类型
      • 以下为可能的设置:
        1. linear(speed) - 线性运动
          • speed = 移动速度(度/秒)
        2. smooth(accel,break,maxspeed) - 运行加速平滑度
          • accel = 加速值:度/秒2(默认=720)
          • break = 减速值:度/秒2(默认=720)
          • maxspeed = 最大移动速度值:度/秒(默认=720)
        3. tween(tweentype,time) - 补间动画曲线
          • tweentype = 补间动作曲线形状
          • time = 移动时间秒数
    • shotestway(可选)
      • 尽可能地使用最短路径到达目标
      • 可能的设置 - true 或者 false(默认=true)
    • nonblocking(可选,仅适用于lookto()动作)
      • 当设置为 true 时,lookto()动作将不会等待移动完成就直接执行后续的动作,用户界面也不会被阻塞
      • 如果有 donecall 参数,那么lookto()执行完后,还会调用 donecall 动作
    • donecall(可选,仅适用于lookto()动作,并且nonblocking被设置为true)
      • 当具有 nonblocking=true 的 lookup() 动作执行完成后会调用本参数中的动作
    示例
    moveto(100.0,5,linear(10));
    zoomto(130,smooth());
    lookto(33,-22,30,smooth(100,50,20));
    looktohotspot(hotspot1);
    looktohotspot(hotspot2, 40);
    looktohotspot(hotspot3, 25, smooth(100,50,20));
    looktohotspot(get(name));
    语句语法
    adjusthlookatadjusthlookat(desthlookat)
    用途

    调整view.hlookat值
    解决360度环绕中到达目标水平位置(desthlookat)的最短路径

    参数
    • desthlookat
      • 0 时,可以从 view.hlookat 中获取正确的当前水平位置值:-180 到 +180
      • 为任意 0到360 的值时,则会修正从当前位置到达该水平位置的最短运动方式
        • 可以直接使用变量,会自动获取实际值
        • 此时当前的view.hlookat会被调整到与该参数的邻近值(不改变当前视图)
    示例
    //用途一:让读取的view.hlookat值正确落在 -180到+180 的范围内
    adjusthlookat(0);
    trace(view.hlookat);
    //用途二:修正view.hlookat,以期通过最短路径方式移动到目标水平位置
    adjusthlookat(140);
    tween(view.hlookat, 140);
    语句语法
    getlooktodistancegetlooktodistance(result, toH, toV, fromH*, fromV*)
    用途

    获取球面坐标中两个位置之间的夹角度数(0到180度)

    参数
    • result
      • 存贮夹角度数值的变量
      • 如果变量不存在则自动创建
    • toH
      • 目标水平位置(-180 到 +180)
      • 可以是一个变量名或确切数值
    • toV
      • 目标垂直位置(-90 到 +90)
      • 可以是一个变量名或确切数值
    • fromH(可选)
      • 起始水平位置(-180 到 +180)
      • 可以是一个变量名或确切数值
      • 如果未定义该参数,则以当前位置(view.hlookat)为起始水平位置
    • fromV(可选)
      • 起始垂直位置(-90 到 +90)
      • 可以是一个变量名或确切数值
      • 如果未定义该参数,则以当前位置(view.vlookat)为起始垂直位置
    语句语法
    stoplooktostoplookto()
    用途

    停止一个未阻塞的 lookto()/looktohotspot()/moeto()/zoomto()动作

    语句语法
    stopmovementsstopmovements()
    用途

    立即停止用户触发的(通过鼠标、键盘或触控板)所有panning投影和缩放行为

    语句语法
    waitwait(parameter)
    用途

    等待若干秒的时间或等待特定的事件(LOAD 或 BLEND)

    注意- 用户界面及所有后续动作将被阻塞,这意味着后面的动作只能在当前动作完成之后才能得到执行。可以使用 oninterrupt 以便让用户有中断能力

    参数
    • parameter 有以下三种可能
      • 任意数字 - 等待的时间秒数
      • LOAD - 一直等待直到加载完成
      • BLEND - 一直等待直到混合效果处理完成
    示例
    oninterrupt(break);
    lookto(150,30,70);
    wait(3);
    lookto(242,0,150);
    lookto(280,-10,50);
    wait(3);
    loadpano(pano2.xml,null,MERGE,BLEND(2));
    lookat(100,50,5);
    wait(BLEND);
    lookto(100,50,150);
    语句语法
    oninterruptoninterrupt(actions)
    用途

    在处理一些会阻塞用户界面的动作之前(如 lookto()、looktohotspot()、moveto()、zoomto()、wait()以及使用WAIT作为donecall参数的tween()),使用该语句,用户就可以随时通过操控界面(如点击动作)来中止这些动作的执行,同时执行参数内容中的动作

    参数
    • action
      • 用户中断后要执行的命令
      • 另外这里还有一个特殊的命令:
        • break - 仅中断当前动作(无其它附加命令)
    示例
    oninterrupt( trace(用户已中断!!); );
    lookto(0,0,90);			
    lookto(90,0,90);
    lookto(180,0,90);

    自动旋转

    autorotate.*说明
    autorotate.start()直接开始自动旋转(无需等待 autorotate.waittime)
    autorotate.stop()停止当前自动旋转并且禁用它
    autorotate.interrupt()中断自动旋转,但自动旋转功能自身仍然可用,会再过 autoratate.waittime 后自再次开始
    autorotate.pause()暂停自动旋转。例如当鼠标划过某个热点时就有必要让旋转暂停下来
    autorotate.resume()重启刚才暂停的旋转

    坐标转换

    语句语法
    screentospherescreentosphere(x,y, h,v)
    spheretoscreenspheretoscreen(h,v, x,y, stereoside*)
    用途

    屏幕坐标与球面坐标之间的相互转换
    screentosphere - 将屏幕上的x/y转换为球面中的h/v
    spheretoscreen - 将球面中的h/v转换为屏幕上的x/y

    参数
    • x/y - 以左上角为原点的屏幕像素坐标
    • h/v - 球面上的方位角度(380×180)
    • stereoside (可选)
      针对分屏VR模式 - 定义哪一边的屏幕坐标,可能的设置有两种:l- 左屏;r- 右屏;或者不设置表示无分屏的普通坐标

    注意:

    1. x,y,h,v必须为变量名,不充许使用确切的数值
    2. 如果变量未定义,它将被自动创建
    示例
    screentosphere(mouse.x, mouse.y, toh, tov);
    语句语法
    screentolayerscreentolayer(layer, screenx,screeny, layerx,layery)
    layertoscreenlayertoscreen(layer, layerx,layery, screenx,screeny)
    用途

    在真实屏幕与相对图层坐标之间转换

    参数
    • layer - 图层元素名称
    • screenx/screeny - 屏幕上相对左上角的坐标像素值变量
    • layerx/layery - 相对于左上角的图层坐标变量

    注意:

    1. 屏幕坐标系是从左上角 (x=0; y=0) 到右下角 (x=stagewidth; y=stateheight)
    2. 如果使能scalechildren,那么层坐标也会被缩放
    3. 不支持旋转的层
    4. 所有参数必须为变量,不充许使用常量
    5. 当变量不存在时,它将被创建
    示例
    screentolayer(bar, mouse.stagex,mouse.stagey, lx,ly);
    div(fill, lx, layer[bar].pixelwidth);
    mul(fill, 100);
    clamp(fill, 0, 100);
    txtadd(layer[barfill].width, get(fill), '%');
    语句语法
    remapfovtyperemapfovtype(fov, srcfovtype, dstfovtype)
    remapfovtyperemapfovtype(fov, srcfovtype, dstfovtype, width, height)
    用途

    就当前视域范围,重新计算出另一种fovtype对应的新fov值

    在改变fovtype及重新计算对应fov的过程中,当前视域(镜头变焦)不会变化

    参数
    • fov
      • 将被改变的fov变量
      • 返回的新值也将存贮在该变量中
    • srcfovtype
      • 当前的fovtype
      • 可以是:HFOV,VFOV,DFOV或者MFOV
    • dstfovtype
      • 新的fovtype
      • 可以是:HFOV,VFOV,DFOV或者MFOV
    • width (可选)
      • 指定视图区域的宽度像素数
      • 默认为当前视图尺寸
    • height (可选)
      • 指定视图区域的高度像素数
      • 默认为当前视图尺寸
    示例
    set(view.fovtype, HFOV);
    set(view.fov, 90);
    ...
    set(view.fovtype, VFOV);
    remapfovtype(view.fov, HFOV, VFOV);

    显示文本

    语句语法
    showtextshowtext(text, textstyle*)
    用途

    在屏幕上显示字符串内容
    注意:
    1、以前是内置语句,现在已由showtext.xml这个默认内含插件实现
    2、同一时刻只能显示一个字符串,再次显示新字符串时,当前字符将被清除

    参数
    • text
      • 待显示的字符文本
      • 可以使用HTML标签来对格式化文本
      • 由于xml语法限制不能使用 <>,但是可以使用 [] 来取而代之,真实的 [] 字符请使用双中括号来代替
      • 要想在Flash与HTML5中呈现相同的格式效果,就只能使用HTML4标签中很简单的子集2),因为Flashplayer对HTML标签的支持是很弱智的,不建议在html代码中使用图片

        格式标签示例:
        1. [b]粗体字[/b]粗体字
        2. [i]斜体字[/i]斜体字
        3. [u]下划线[/u]下划线
        4. [br] ⇒ 换行
        5. [font size='10' style='font-size:10px;']小字体[/font] ⇒ 使用不同的字体尺寸 (Flash使用'size';HTML5使用'style')
        6. [font color='#FF0000' style='color:#FF0000;']红色[/font] ⇒ 使用不同的字体颜色 (Flash使用'color';HTML5使用'style')
      • textstyle (可选)
        • 用于text的<textstyle>元素名称
        • 如果没有定义该参数,则使用默认的<textstyle>

    视图或全景内容更新

    语句语法
    updateobjectupdateobject(updateall*, updatefov*)
    用途

    重建全景对象的3D模型
    在浏览时动态改变display.details以及display.tessmode后必须使用这个语句以更新全景。当在交互方式更改image.hfov,image.vfov或者image.voffset这些设置时,应使用updatefov=true试调用该语句,以便得到更新后的全景对象

    注意-该语句很消耗系统资源,请谨慎使用!

    参数
    • updateall (可选)
      • 针对多重分辨率 - 是否更新所有层
      • 可能的设置:truefalse (默认为 false)
    • updatefov (可选)
      • 全景更新同时重新解析出新的image.hfov,image.vfov以及image.voffset
      • 可能的设置:truefalse (默认为 false)
    示例
    set(display,details,24);
    updateobject(true,true);
    语句语法
    updatescreenupdatescreen()
    • 直接强制重绘当前屏幕内容
    语句语法
    invalidatescreeninvalidatescreen()
    • 直接强制重绘当前屏幕内容
    • 并全重置idletime计数(无用户交互时间计数)

    动态添加或移除屏幕元素

    添加元素
    addlayer(name)
    addplugin(name)
    addhotspot(name)
    addlensflare(name, ath*, atv*)
    用途

    动态创建一个新的图层、插件、热点或光晕

    参数
    • name - 待创建的新元素名称(最好使用小写英文,不要使用数字或其它字符开头)
    • ath/atv (仅针对光晕) - 光晕的空间位置
    示例
    addlayer(button);
    addhotspot(newspot);
    addhotspot(polyspot);
    addlensflare(sun, 20, -60);
    删除元素
    removelayer (name,removechildren*)
    removeplugin(name,removechildren*)
    removehotspot(name)
    removelensflare(name)
    用途

    动态删除一个图层、插件、热点或光晕

    参数
    • name - 待删除的元素名称
    • removechildren (可选) - 设置为true时,该元素的所有子元素也将被删除

    层/插件/热点的专属动作

      layer / plugin / hotspot[name].loadstyle(name)
      layer / plugin / hotspot[name].registercontentsize(imagewidth,imageheight)
      layer / plugin / hotspot[name].resetsize()
      layer / plugin / hotspot[name].updatepos()
      layer / plugin / hotspot[name].changeorigin(align,edge)
      layer / plugin / hotspot[name].getfullpath()
      hotspot[name].getcenter(ath,atv)

    扩展js接口

    语句语法
    jsjs( Javascript函数(参数) )
    用途

    调用一个Javascript函数
    在实际调用js代码之前,其中的参数将预先被krpano解析,记得要使用get(var)语句去获取变量的确切值

    Flash模式时注意 - 该语句需要使用Flashplayer的扩展接口,它仅在浏览器内部且在线时有效,当离线浏览或本地url浏览,那么就需要设置Flashplayer的安全设置项

    示例
    //以下是存在于js或 html文件中的Javascript代码
    function test(p1, p2, p3)
    {
      alert(p1 + ": " + p2 + " / " + p3);
    }
    //全景项目中的调用代码
    js( test('Lookat', get(view.hlookat), get(view.vlookat)) );
    语句语法
    jscalljscall( …任意Javascript代码… )
    用途

    直接在全景中执行任何Javascript代码
    可以在Javascript代码中直接读写krpano的js接口对象

    Flash模式时注意 - 该语句需要使用Flashplayer的扩展接口,它仅在浏览器内部且在线时有效,当离线浏览或本地url浏览,那么就需要设置Flashplayer的安全设置项

    示例
    //改变html元素的风格
    jscall('document.getElementById("test").style.display="none";');
    //使用calc()语句构建js语句并使用krpano变量
    jscall(calc('console.log("krpano version: ' + version + '")'));
    //返回前一页面
    jscall('history.back()');
    语句语法
    jsgetjsget(variable, …Javascript代码… )
    用途

    获取Javascript变量或Javascript函数的值
    可以在js代码读写krpano接口对象

    参数
    • variable
      • 用于存贮返回值的变量名
      • 如果变量不存在则自动创建

    Flash模式时注意 - 该语句需要使用Flashplayer的扩展接口,它仅在浏览器内部且在线时有效,当离线浏览或本地url浏览,那么就需要设置Flashplayer的安全设置项

    示例
    //得到当前页面的地址
    jsget(ret, 'location.href');
    trace('地址为:', get(ret));
    //让用户输入内容
    jsget(passwort, 'prompt("请输入口令")');
    if(password == 'hidden', ...);
    //得到当前日期(YYYY-MM-DD):
    jsget(date, 'new Date().toISOString().slice(0,10);');
    trace('日期为:', get(date));

    调试

    语句语法
    showlogshowlog(state*)
    用途

    显示或隐藏日志信息

    参数
    • state (可选)
      • true - 显示日志信息(默认)
      • false - 隐藏日志信息
    语句语法
    tracetrace('view.maxpixelzoom=', view.maxpixelzoom);
    errorerror('view.maxpixelzoom=', view.maxpixelzoom);
    warningwarning('view.maxpixelzoom=', view.maxpixelzoom);
    debugdebug('view.maxpixelzoom=', view.maxpixelzoom);
    用途

    将文本或变量输出到日志信息中

    • trace - 信息以”INFO:“开头(白色字体)
    • error - 信息以”ERROR:“开头(黄色字体)
    • warning - 信息以”WARNING:“开头(蓝色字体)
    • debug - 信息以”DEBUG:“开头(绿色字体),并且仅在 debugmode=true 时才显示

    注意- 过多地输入跟踪信息会影响全景渲染效率,尤其不要在每一帧都有跟踪信息

    参数
      • 任意文字或变量
      • 当使用变量时,会自动解获变量的确切值
    示例
    trace('view.maxpixelzoom=', view.maxpixelzoom);
    <events onkeydown="trace('keycode=',keycode);" />
    onresize="trace('size=',stagewidth,'x',stageheight);"
    onclick="trace('mouse clicked at ', mouse.x, ' / ', mouse.y);"
    trace('xyz=',xyz,' get(xyz)=',get(xyz));
    语句语法
    fatalerrorfatalerror(errormessage)
    用途

    在全景中间显示错误信息条并中止用户交互

    参数
    • errormessage
      • 待显示的错误信息

    1) 一种图像投影算法,以意大利画家帕尼尼命名,这种投影法可能更好的解决鱼眼图片的畸变问题
    2) 更多详细内容请参考AS3FlashText
    vrm/语法参考.txt · 最后更改: 2018/01/19 09:52 由 vrm