ThingJS官方示例教程(三)

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

上一节我们学习了在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 = newTHING.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 = newTHING.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);

});

functionqueryByOpen() {
    //开启系统内置的左键双击进入下一层级操作
    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);
}

functionqueryByClose() {
    //暂停系统内置的左键双击进入下一层级操作
    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);
}

免责声明:文章转载自《ThingJS官方示例教程(三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇django 数据库迁移ThreeJs 3D 全景项目开发总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

08年为何报土木工程?

最近家里面几个亲戚的小孩(不同区域的:我自己老家和老婆老家的)都问我高考填志愿的事,我发现他们都报“土木工程”专业而且他们班上很多人都报土木工程,我惊呼这是巧合、跟风,非常不解。问老婆,老婆说:受大环境定的,建筑类的设计人才较缺且中国近几年到处大兴土木。我三分认同,但还是不解,决意要找到原因。莫非他们的某篇课文感动了他们?---不太可能。昨晚陪老婆看了一集...