from direct.showbase.ShowBase import ShowBase # 导入ShowBase类 from direct.actor.Actor import Actor # 导入Actor类 from panda3d.core import LineSegs, NodePath, Vec3 # 导入LineSegs、NodePath和Vec3类 from direct.task import Task # 导入Task类 from math import pi, sin, cos # 导入pi、sin和cos函数 class MyApp(ShowBase): # 定义MyApp类,继承ShowBase类 def init(self): # 定义初始化函数 ShowBase.init(self) # 调用ShowBase类的初始化函数 self.disableMouse() # 禁用鼠标控制 self.keymap = { 'w': False, 'a': False, 's':False,'d':False} # 定义键盘映射字典 self.character = self.loader.loadModel('可爱柴犬.glb') # 加载汽车模型 self.character.setPos(0,0,0) # 设置汽车的位置 self.character.setH(-90) # 设置汽车的朝向 self.character.reparentTo(self.render) # 将汽车模型添加到场景中 # 监听键盘事件 self.accept('w', self.setKey, ['w', True]) # 监听'w'键按下事件,调用setKey方法,将'w'键的值设置为True self.accept('a', self.setKey, ['a', True]) # 监听'a'键按下事件,调用setKey方法,将'a'键的值设置为True self.accept('s', self.setKey, ['s', True]) # 监听's'键按下事件,调用setKey方法,将's'键的值设置为True self.accept('d', self.setKey, ['d', True]) # 监听'd'键按下事件,调用setKey方法,将'd'键的值设置为True self.accept('w-up', self.setKey, ['w', False]) # 监听'w'键松开事件,调用setKey方法,将'w'键的值设置为False self.accept('a-up', self.setKey, ['a', False]) # 监听'a'键松开事件,调用setKey方法,将'a'键的值设置为False self.accept('s-up', self.setKey, ['s', False]) # 监听's'键松开事件,调用setKey方法,将's'键的值设置为False self.accept('d-up', self.setKey, ['d', False]) # 监听'd'键松开事件,调用setKey方法,将'd'键的值设置为False self.taskMgr.add(self.update, 'update') # 添加任务 def setKey(self, key, value): # 定义setKey函数 self.keymap[key] = value # 更新键盘映射字典 def update(self,task): # 定义update函数 if self.keymap['w']: # 如果按下了w键 self.character.setY(self.character, 0.1) # 向前移动 if self.keymap['a']: # 如果按下了a键 self.character.setX(self.character, -0.1) # 向左移动 if self.keymap['s']: # 如果按下了s键 self.character.setY(self.character, -0.1) # 向后移动 if self.keymap['d']: # 如果按下了d键 self.character.setX(self.character, 0.1) # 向右移动 return task.cont # 返回任务继续执行 app = MyApp() # 创建MyApp对象 app.run() # 运行程序 按下w键向面向的方向移动 按下a键向面向的方向的左边移动 按下s键向面向的方向的反方向移动 按下d键向面向的方向的右边移动


原文地址: https://www.cveoy.top/t/topic/ovqK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录