three.js添加鼠标事件—使用onEvent.js插件

本文介绍了如何使用onEvent.js插件来简化three.js中的鼠标事件处理。相比官方的Raycast类,onEvent.js提供更便捷的方法来实现物体拾取和监听,包括'click', 'hover', 'gaze', 'longGaze'等事件。" 127444496,11904724,Dev C++ 调试指南,"['C++', '调试工具', '编程技巧']
摘要由CSDN通过智能技术生成

three.js的官方文档中提供了一个Raycast类进行物体拾取来实现模型鼠标事件,其原理就是先建立一个Raycaster对象,通过setFromCamera函数向场景物体发出射线,再通过intersectObject检测射线投射到的物体。很显然这种点击物体实现代码有些繁琐,因此通过不断地查询资料,找到一个封装了鼠标事件的插件,即onEvent.js插件。相比之下,使用插件更加简便易懂。

onEvent.js的使用方法

1、引入
使用script标签引入onEvent.js
2、初始化
确保已经引入onEvent.js,在render渲染之前初始化

var threeOnEvent = new THREE.onEvent(scene,camera);

3、添加监听器“on”

mesh.on</
NestJS 是一个用于构建高效、可靠和可扩展的服务器端应用程序的框架。它使用 TypeScript 编写,但也兼容纯 JavaScript。NestJS 内置了对 WebSocket 的支持,并且可以通过集成 socket.io 来管理连接、处理事件和广播消息。 以下是使用 socket.io 在 NestJS 中管理连接、处理事件和广播消息的基本步骤: 1. 安装依赖:首先需要安装 NestJS 和 socket.io 相关的依赖包。 ```bash npm install @nestjs/websockets @nestjs/platform-express socket.io ``` 2. 创建 WebSocket 模块:使用 NestJS 提供的装饰器和模块创建一个 WebSocket 模块。 ```typescript // socket.module.ts import { Module } from '@nestjs/common'; import { WebsocketsModule } from '@nestjs/websockets'; import { SocketModule } from '@nestjs/platform-express'; @Module({ imports: [ WebsocketsModule.register(), SocketModule, ], }) export class AppModule {} ``` 3. 创建 Socket 守护者(Guard)或拦截器(Interceptor):根据需要,你可能想要创建一个守卫或拦截器来处理验证、授权等逻辑。 ```typescript // socket.guard.ts import { Injectable } from '@nestjs/common'; import { CanActivate, ExecutionContext } from '@nestjs/common'; import { Socket } from 'socket.io'; @Injectable() export class SocketGuard implements CanActivate { canActivate(context: ExecutionContext): boolean { const ctx = context.switchToHttp(); const req = ctx.getRequest<Socket>(); // 在这里添加你的验证逻辑 return true; // 或者根据验证结果返回 false } } ``` 4. 创建 Socket 控制器:创建一个 Socket 控制器来处理客户端事件和发送消息。 ```typescript // socket.controller.ts import { Controller, OnModuleInit, OnModule销毁, EmitEvent, OnEvent, socket } from '@nestjs/websockets'; import { Socket as IoSocket } from 'socket.io'; @Controller('socket') export class SocketController implements OnModuleInit, OnModule销毁 { @OnModuleInit() onModuleInit(client: IoSocket) { // 初始化时的操作,例如连接的统计、初始化数据广播等 } @OnModule销毁() onModule销毁(client: IoSocket) { // 模块销毁时的操作 } @EmitEvent('userConnected') handleUserConnected(data: any) { // 当客户端触发 userConnected 事件时调用 return data; } @OnEvent('connection') handleConnection(client: IoSocket) { // 当客户端连接时的操作 } @OnEvent('disconnect') handleDisconnect(client: IoSocket) { // 当客户端断开连接时的操作 } } ``` 5. 使用装饰器来注册事件处理器:`@EmitEvent`、`@OnEvent` 等装饰器用于注册对应的事件处理函数。 6. 在主模块中导入 WebSocket 模块:确保你的 WebSocket 模块在主模块中被导入。 ```typescript // app.module.ts import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppModule } from './app.module'; import { SocketModule } from './socket.module'; @Module({ imports: [AppModule, SocketModule], controllers: [AppController], }) export class AppModule {} ``` 现在,你的 NestJS 应用已经可以使用 socket.io 来管理连接、处理事件和广播消息了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值