This commit is contained in:
Rowland 2026-01-21 17:18:14 +08:00
parent d7a5f420c4
commit ef9fabd43d
2 changed files with 35 additions and 17 deletions

View File

@ -58,18 +58,20 @@ class CustomMouseController:
def move(self, task):
dt = self.showbase.clock.dt
if self.keyMap["cam-left"]:
self.showbase.camera.setX(self.showbase.camera, -self.move_speed * dt)
if self.keyMap["cam-right"]:
self.showbase.camera.setX(self.showbase.camera, +self.move_speed * dt)
if self.keyMap["cam-backward"]:
self.showbase.camera.setY(self.showbase.camera, -self.move_speed * dt)
if self.keyMap["cam-forward"]:
self.showbase.camera.setY(self.showbase.camera, +self.move_speed * dt)
if self.keyMap["cam-up"]:
self.showbase.camera.setZ(self.showbase.camera, +self.move_speed * dt)
if self.keyMap["cam-down"]:
self.showbase.camera.setZ(self.showbase.camera, -self.move_speed * dt)
# 检查ImGui是否捕获了键盘输入
if self._should_handle_keyboard():
if self.keyMap["cam-left"]:
self.showbase.camera.setX(self.showbase.camera, -self.move_speed * dt)
if self.keyMap["cam-right"]:
self.showbase.camera.setX(self.showbase.camera, +self.move_speed * dt)
if self.keyMap["cam-backward"]:
self.showbase.camera.setY(self.showbase.camera, -self.move_speed * dt)
if self.keyMap["cam-forward"]:
self.showbase.camera.setY(self.showbase.camera, +self.move_speed * dt)
if self.keyMap["cam-up"]:
self.showbase.camera.setZ(self.showbase.camera, +self.move_speed * dt)
if self.keyMap["cam-down"]:
self.showbase.camera.setZ(self.showbase.camera, -self.move_speed * dt)
if self.keyMap["mouse1"] or self.keyMap["mouse3"]: # 左键或右键按下
try:
# 检查是否应该处理鼠标事件避免与ImGui冲突
@ -101,6 +103,25 @@ class CustomMouseController:
return task.cont
def _should_handle_keyboard(self):
"""检查是否应该处理键盘事件避免与ImGui冲突"""
try:
# 检查ImGui是否想要捕获键盘
try:
from imgui_bundle import imgui
if hasattr(imgui, 'get_io') and imgui.get_io().want_capture_keyboard:
return False
except ImportError:
pass
# 如果右键按下优先处理视角控制即使ImGui有焦点
if self.keyMap["mouse3"]:
return True
return True
except:
return True
def _should_handle_mouse(self):
"""检查是否应该处理鼠标事件避免与ImGui冲突"""
try:

View File

@ -306,7 +306,7 @@ class MyWorld(CoreWorld):
self.accept('alt-up', self._on_alt_released)
self.accept('n', self._on_n_pressed)
self.accept('o', self._on_o_pressed)
self.accept('s', self._on_s_pressed)
self.accept('control-s', self._on_save_project)
self.accept('f4', self._on_f4_pressed)
# 编辑功能快捷键
@ -1565,10 +1565,7 @@ class MyWorld(CoreWorld):
if self.ctrl_pressed:
self._on_open_project()
def _on_s_pressed(self):
"""S键按下 - 检查Ctrl+S组合键"""
if self.ctrl_pressed:
self._on_save_project()
def _on_f4_pressed(self):
"""F4键按下 - 检查Alt+F4组合键"""