键盘漫游
Keyboard Roam

你将学到什么
- flags 状态表 跟踪按键按下
- clock.onTick 每帧根据 flags 移动相机
- 禁用 screenSpaceCameraController 避免与鼠标冲突
- 移动速率随 相机高度 自适应
效果说明
GUI「启动键盘漫游」后:WASDQE 调姿态,IJKLUO 平移,1234 观察方向,方向键驱动地球自转;「停止」恢复鼠标控制。
核心概念
按键 → flag 映射
js
document.addEventListener('keydown', (e) => {
const flagName = getFlagFromKeyboard(e); // 'moveForward', 'pitchUp' ...
if (flagName) flags[flagName] = true;
});
document.addEventListener('keyup', (e) => {
if (flagName) flags[flagName] = false;
});onTick 更新
js
viewer.clock.onTick.addEventListener(() => {
const moveRate = (cameraHeight / 150.0) * setStep;
if (flags.moveForward) camera.moveForward(moveRate);
if (flags.headingLeft) camera.setView({ orientation: { heading: heading - 0.005 } });
// ...
});禁用默认交互
js
viewer.scene.screenSpaceCameraController.enableTranslate = false;
viewer.scene.screenSpaceCameraController.enableTilt = false;退出漫游时记得 removeEventListener 并 re-enable。
实现步骤
- 定义
flags对象与keyboardRoamObjGUI startKeyboardRoam(step)注册 keydown/keyup/onTickgetFlagFromKeyboard映射键码quitKeyboardRoam清理监听、恢复 controller
按键一览
| 键 | 作用 |
|---|---|
| WASDQE | 俯仰 / 偏航 / 翻滚 |
| IJKLUO | 前后左右上下平移 |
| 1234 | 观察方向微调 |
| 方向键 | 地球自转 |
源码
完整源码见 GitHub。
小结
基础功能 · Cesium.js · 17/19
