在这个修改后的代码中,我们需要将 self.collisionHandler 的创建放在 self.cTrav 之前,因为 self.collisionHandlerself.cTrav 的构造函数中被使用。修改后的代码如下所示:

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.collisionHandler = CollisionHandlerEvent()
        self.collisionHandler.addInPattern("%fn-into-%in")
        
        # 设置碰撞检测
        self.collisionManager = CollisionTraverser()
        self.cTrav = self.collisionManager.addCollider(self.cam.node(), self.collisionHandler)
        self.cTrav.showCollisions(self.render)
        
        self.accept("cam-into-scene", self.onCollision)
        
    def onCollision(self, entry):
        # 处理碰撞事件
        print("Camera collided with", entry.getIntoNodePath().getName())
        
app = MyApp()
app.run()

在修改后的代码中,我们首先创建了 self.collisionHandler,然后将其作为参数传递给 addCollider() 函数,以便在创建 self.cTrav 时使用。这样就不会出现 AttributeError 错误了

pythonfrom directshowbaseShowBase import ShowBasefrom panda3dcore import CollisionTraverserclass MyAppShowBase def __init__self ShowBase__init__self # 加载模型 selfscene =

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

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