pythonfrom directshowbaseShowBase import ShowBasefrom panda3dcore import CollisionTraverserfrom panda3dcore import CollisionTraverser CollisionHandlerEventclass MyAppShowBase def __init__self
在修改后的代码中,我们需要将 self.collisionHandler 的初始化放在 self.collisionManager 之后,以便可以使用它来添加碰撞事件的处理程序。因此,我们需要交换以下两行代码的顺序:
self.cTrav = self.collisionManager.addCollider(self.cam.node(), self.collisionHandler)
self.collisionHandler = CollisionHandlerEvent()
修改后的完整代码如下:
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionHandlerEvent
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# 加载模型
self.scene = self.loader.loadModel("models/environment")
self.scene.reparentTo(self.render)
# 设置碰撞检测
self.collisionManager = CollisionTraverser()
self.collisionHandler = CollisionHandlerEvent()
self.cTrav = self.collisionManager.addCollider(self.cam.node(), self.collisionHandler)
self.cTrav.showCollisions(self.render)
# 设置碰撞处理程序
self.collisionHandler.addInPattern("%fn-into-%in")
self.accept("cam-into-scene", self.onCollision)
def onCollision(self, entry):
# 处理碰撞事件
print("Camera collided with", entry.getIntoNodePath().getName())
app = MyApp()
app.run()
``
原文地址: https://www.cveoy.top/t/topic/fDhT 著作权归作者所有。请勿转载和采集!