<style name="skin_ftyxhotspot_F" 
       /* 定义图片源文件,这是一张包含所有动画帧的“雪碧图”(Sprite Sheet) */
       url="F.png"
       
       /* 当图片加载完成时立即执行:
          1. 启动动画引擎 do_crop_animation,参数为:帧宽86px, 帧高86px, 帧率30帧/秒
          2. 执行 add_all_the_time_tooltip_for_VR() 添加文本提示框 */
       onloaded="do_crop_animation(86,86, 30);add_all_the_time_tooltip_for_VR()" 
       
       /* 初始透明度设为 0.8 */
       alpha="0.8"
       
       /* 鼠标移出事件:使用 tween(补间动画) 将图标平滑恢复到 0.6 的大小和 0.8 的透明度 */
       onout.addevent="tween(scale,0.6); tween(alpha,0.8);" 
       
       /* 鼠标悬停事件:使用 tween 平滑放大图标到 0.8,透明度提升至 0.9,产生“呼吸交互感” */
       onover.addevent="tween(scale,0.8); tween(alpha,0.9);"
       
       /* PC 端正常状态下的缩放比例 */
       scale.normal="0.6" 
       
       /* 移动设备端正常状态下的缩放比例(为了手指更容易点击,通常比PC端稍大) */
       scale.mobile="0.7" 
       
       /* 点击事件核心逻辑:
          1. if(linkedscene...): 判断是否配置了目标场景(linkedscene)
          2. skin_hidetooltips(): 隐藏当前的文字提示
          3. tween(...): 播放一个消失动画(缩小至0.25、Y轴向上偏移20、透明度降为0)
          4. looktohotspot(): 将全景视角平滑移动并对准当前点击的热点
          5. loadscene(...): 加载目标场景,并带入全局设置的加载过渡效果(flags和blend)
          6. skin_updatescroll(): 刷新皮肤的滚动UI状态 */
       onclick="if(linkedscene, skin_hidetooltips(); tween(scale,0.25,0.5); tween(oy,20,0.5); tween(alpha,0,0.8); looktohotspot(); loadscene(get(linkedscene),null,get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend)); skin_updatescroll(); );"
/>


<action name="do_crop_animation" scope="local" args="framewidth, frameheight, framerate">
    
    calc(local.xframes, (caller.imagewidth /framewidth) BOR 0);
    calc(local.frames, xframes * ((caller.imageheight / frameheight) BOR 0));
    def(local.frame, integer, 0);
        
    calc(caller.crop, '0|0|' + framewidth + '|' + frameheight);
        
    setinterval(calc('crop_anim_' + caller.name), calc(1.0 / framerate),
        
        if(caller.loaded,
            
            inc(frame);
            
            if(frame GE frames, 
                if(caller.onlastframe !== null, callwith(caller, onlastframe() ) ); 
                set(frame,0); 
            );
            
            mod(xpos, frame, xframes);   div(ypos, frame, xframes);   Math.floor(ypos);            mul(xpos, framewidth);       mul(ypos, frameheight);      calc(caller.crop, xpos + '|' + ypos + '|' + framewidth + '|' + frameheight);
          ,
            clearinterval(calc('crop_anim_' + caller.name));
        );
    );
</action>