diff --git a/core/CustomMouseController.py b/core/CustomMouseController.py index f19754ca..9c0d7e45 100644 --- a/core/CustomMouseController.py +++ b/core/CustomMouseController.py @@ -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: diff --git a/demo.py b/demo.py index c3217bed..bdeccaad 100644 --- a/demo.py +++ b/demo.py @@ -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组合键"""