zoukankan      html  css  js  c++  java
  • ThingJS官方示例教程(三)

    上一节我们学习了在ThingJS使用app.level.change(ev.campus);这个来注册进出层级事件,该事件可以实现楼层的进出,有自定义属性或是ID属性物体的双击聚焦功能,本节则是详细讲解一下ThingJS中关于层级切换的一些注册事件以及如何去控制层级切换!

    ThingJS层级切换启用与暂停

    在ThingJS中,注册进出层级事件是很简单的,如下方代码所示,但是我们又该如何在层级发生变化的时候去添加对应的逻辑代码呢?其实也不难,使用ThingJS中的层级监听事件THING.EventType.EnterLevel以及THING.EventType.LeaveLevel即可在进出层级的时候去写我们的控制代码了!

    app.on('load', function (ev) {
        // 场景加载完成后 进入园区层级
        app.level.change(ev.campus);
    });

    完整的进出层级监听事件如下:

    /**
     * 说明:以建筑(Building)层级为例,说明进出层级事件 及其 方向性
     * 操作:
     * 左键双击建筑 进入建筑层级;此时触发了进入建筑事件
     * 进入建筑后再左键双击 进入楼层;此时触发了退出建筑事件
     * 进入楼层后右键单击 返回建筑;此时触发了进入建筑事件
     * 返回建筑后 右键单击 返回园区;此时触发了退出建筑事件
     * 教程:ThingJS教程——>园区与层级——>【进阶】场景层级事件
     * 难度:★★★☆☆
     */
    var app = new THING.App({
        url: 'https://www.thingjs.com/static/models/storehouse'     // 场景地址
    });
    
    app.on('load', function (ev) {
        // 场景加载完成后 进入园区层级
        app.level.change(ev.campus);
    });
    
    // 监听建筑层级的 EnterLevel 事件
    app.on(THING.EventType.EnterLevel, ".Building", function (ev) {
        // 当前进入的层级对象
        var current = ev.current;
        // 上一层级对象
        var preObject = ev.previous;
    
        // 如果当前层级对象的父亲是上一层级对象(即正向进入)
        if (current.parent === preObject) {
            console.log("从 " + preObject.type + " 进入了 " + current.type);
        }
        else {
            console.log("进入 " + current.type + "(从 " + preObject.type + " 退出)");
        }
    });
    
    // 监听建筑层级的 LeaveLevel 事件
    app.on(THING.EventType.LeaveLevel, ".Building", function (ev) {
        // 要进入的层级对象
        var current = ev.current;
        // 上一层级对象(退出的层级)
        var preObject = ev.previous;
    
        if (current.parent === preObject) {
            console.log("退出 " + preObject.type + " 进入 " + current.type);
        }
        else {
            console.log("退出 " + preObject.type + " ,返回 " + current.type);
        }
    })

    这个只是一个基础版本的进出层级监控输出,如果是需要在进出层级的时候添加事件,则需要在我们的EnterLevel事件、LeaveLevel 事件中添加对应的功能事件代码,比如后续的添加物体2D顶牌或者3D Marker标记,我们也会在后续进行讲解。

    同样,针对进出园区层级控制,我们也有重新注册园区事件以及暂停园区事件的功能,相关代码如下:

    /**
     * 说明:以建筑(Building)层级为例,说明进出层级事件 及其 方向性
     * 操作:
     * 左键双击建筑 进入建筑层级;此时触发了进入建筑事件
     * 进入建筑后再左键双击 进入楼层;此时触发了退出建筑事件
     * 进入楼层后右键单击 返回建筑;此时触发了进入建筑事件
     * 返回建筑后 右键单击 返回园区;此时触发了退出建筑事件
     * 教程:ThingJS教程——>园区与层级——>【进阶】场景层级事件
     * 难度:★★★☆☆
     */
    var app = new THING.App({
        url: 'https://www.thingjs.com/static/models/storehouse'     // 场景地址
    });
    
    app.on('load', function (ev) {
        new THING.widget.Button('开', queryByOpen);
        new THING.widget.Button('关', queryByClose);
        // 场景加载完成后 进入园区层级
        app.level.change(ev.campus);
    
    });
    
    function queryByOpen() {
        // 开启系统内置的左键双击进入下一层级操作
        app.resumeEvent(THING.EventType.DBLClick, '*', THING.EventTag.LevelEnterOperation);
        // 开启系统内置的右键单击返回上一层级操作
        app.resumeEvent(THING.EventType.Click, null, THING.EventTag.LevelBackOperation);
        // 开启进入物体层级默认操作行为
        app.resumeEvent(THING.EventType.LeaveLevel, '.Thing', THING.EventTag.LevelSceneOperations);
        // 开启退出物体层级默认操作行为
        app.resumeEvent(THING.EventType.EnterLevel, '.Thing', THING.EventTag.LevelSceneOperations);
    }
    
    function queryByClose() {
        // 暂停系统内置的左键双击进入下一层级操作
        app.pauseEvent(THING.EventType.DBLClick, '*', THING.EventTag.LevelEnterOperation);
        // 暂停系统内置的右键单击返回上一层级操作
        app.pauseEvent(THING.EventType.Click, null, THING.EventTag.LevelBackOperation);
        // 暂停进入物体层级默认操作行为
        app.pauseEvent(THING.EventType.EnterLevel, '.Thing', THING.EventTag.LevelSceneOperations);
        // 暂停退出物体层级默认操作行为
        app.pauseEvent(THING.EventType.LeaveLevel, '.Thing', THING.EventTag.LevelSceneOperations);
    }
  • 相关阅读:
    程序员的 59 条搞笑但却真实无比的编程语录
    Github最流行的10,000个Java项目使用的类库
    10大怪异的编程语言
    如何写一篇好的技术博客
    四件在我步入职业软件开发生涯那天起就该知道的事情
    程序员最艰巨的十大任务
    10 个理由让你继续干 IT
    被诅咒的程序员的七宗罪
    顶级程序员的 10 条最佳实践
    谷歌如何管理世界上最聪明的工程师?
  • 原文地址:https://www.cnblogs.com/thingjs/p/13279375.html
Copyright © 2011-2022 走看看