当前位置: 首页 > news >正文

Babylon.js学习之路《添加自定义摇杆控制相机》

在这里插入图片描述

文章目录

  • 前言
  • 实现方法
      • 1、定义挂载DOM、摇杆样式
      • 2、引入插件“nipplejs”
  • 总结
    • 对你有帮助的话,还请不要吝啬**赞**和**收藏**
    • 这也是我写作的动力【抱拳】


前言

在 Babylon.js 中,经常需要使用摇杆来控制相机的移动。
比如移动端,类似王者荣耀控制英雄移动的摇杆。
经过对比,我发现一种非常简洁、高效的实现方式。

在这里插入图片描述


实现方法

1、定义挂载DOM、摇杆样式

首先,定义摇杆的DOM挂载节点,以及摇杆的样式
这里直接使用Html、css实现,比较简单

定义摇杆的DOM挂载节点

<div id="joystick-container"></div>

定义摇杆样式

:deep(#joystick-container) {width: 100%;div {width: 100%;.front {opacity: 0.8 !important;background-image: url("../../assets/images/step.png") !important;background-size: cover !important;user-select: none !important;}.back {opacity: 0.8 !important;background: none !important;background-image: url("../../assets/images/rocker.png") !important;background-size: cover !important;user-select: none !important;}}
}

2、引入插件“nipplejs”

使用nipplejs插件

import nipplejs from 'nipplejs'
import { onJoystickMove } from './index'let lastpx
let lastpy
let xAddPos
let yAddPos
let touch_isDown = false
let translateTransform;export const initNipplejs = (width) => {const joystickContainer = document.getElementById("joystick-container");const option = {zone: joystickContainer,mode: "static", // 静态模式,摇杆固定在屏幕上position: { top: "90%", left: "50%" }, // 摇杆的初始位置follow: false,size: width / 2}// 初始化虚拟摇杆const joystick = nipplejs.create(option);joystick.on("start", function (evt, data) {touch_isDown = truelastpx = data.position.x;lastpy = data.position.y;// 摇杆移动事件,可以加入其他逻辑代码onJoystickMove()}).on("move", function (evt, data) {// direction有不存在的情况if (data.direction && touch_isDown) {xAddPos = Math.round(lastpx - data.position.x)yAddPos = Math.round(lastpy - data.position.y)}}).on("end", function (evt, data) {touch_isDown = falsexAddPos = 0yAddPos = 0});window.scene.registerBeforeRender(function() {if (!xAddPos || !yAddPos) return//移动速度调整window.camera.target.x += yAddPos * -1;window.camera.target.z += xAddPos * -1;})return joystick
}

在场景渲染完成后,添加摇杆

// baseWidth为摇杆尺寸,我这里以参数传递
scene.onAfterRenderObservable.addOnce(() => {rockerControl = initNipplejs(baseWidth);
})

总结

之所以使用这个插件,是因为我之前手写的摇杆有些问题:
当鼠标超出摇杆范围时,相机移动的方向就固定在鼠标移动出摇杆范围之前的方向了。
也就是当我向右操控摇杆,鼠标滑出摇杆范围时,再向其他拖动,相机依然向右移动。
遇到这个问题后,我发现要加的代码很多,不如直接使用nipplejs插件,完美解决问题

对你有帮助的话,还请不要吝啬收藏

这也是我写作的动力【抱拳】

http://www.dtcms.com/a/519441.html

相关文章:

  • 【JAVA 进阶】SpringBoot集成Sa-Token权限校验框架深度解析
  • 【CMakeLists.txt】Qt6 依赖配置详解
  • 用js做网站登录网页成品
  • 数据库安全网关:从“看得见访问”到“控得住风险”的关键一层
  • 对泊松过程的理解
  • 【数论】质数筛(埃氏筛、欧拉筛)
  • 扩展名网站兰州做网站一咨询兰州做网站公司
  • 华为OD-Java面经-21届考研
  • Excel拆分和合并优化版本
  • 智能网联汽车:当汽车遇上“智慧网络”
  • 常规点光源在工业视觉检测上的应用
  • C++新特性——正则表达式
  • 基于卷积神经网络的汽车类型识别系统,resnet50,vgg16,resnet34【pytorch框架,python代码】
  • 设计 企业网站电脑系统网站建设
  • 做网站业务的怎么找资源网站推广名片
  • FPGA强化- HDMI显示器驱动设计与验证
  • 【PPT-ungroup PPT解组合,python无水印】
  • Java 17 环境下 EasyPoi 反射访问异常分析与解决方案(ExcelImportUtil.importExcelMore)
  • SpringBoot+alibaba的easyexcel实现前端使用excel表格批量插入
  • 重大更新,LVGL有UI编辑器用了
  • 多场景 VR 教学编辑器:重构教学流程的场景化实践
  • 公司做网站让我们销售单页面网站模板怎么做
  • 广州微网站建设价位广东网站建设公司
  • 基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
  • 《与幽灵作战:Python 棘手 Bug 的调试策略与实战技巧》
  • 使用Requests和lxml实现飞卢小说网小说爬取
  • bug 记录 - 路由守卫 beforeRouteLeave 与 confirm 结合,不生效问题
  • 数据库字段类型bit容易被忽视的bug
  • centos 配置网络
  • [人工智能-大模型-55]:模型层技术 - AI的算法、数据结构中算法、逻辑处理的算法异同