【问题标题】:Panda3d setLinearMovement IssuePanda3d setLinearMovement 问题
【发布时间】:2022-08-02 20:47:46
【问题描述】:

我正在制作ursina / panda3d 游戏,我想让一些敌人跟随玩家。我决定使用来自panda3d.bulletBulletCharacterControllerNode 并设置一个setLinearMovement。我不知道为什么,但它没有起作用,所以这是我的代码灵感来自 Roboto 先生:


class AIPathFinder(DirectObject):

    def __init__(self):

        self.radius = 30


        self.loadModels()
        self.setAI()
        


    def loadModels(self):
        # Seeker



        h = 4
        w = 0.6
        shape = BulletCapsuleShape(w, h - 2 * w, ZUp)
        
        points = [Point3(3, 0, 2), Point3(3, 0, 2), Point3(30, 0, 2)]
        
        self.enemies = []
        self.enemiesNP = []
        self.enemiesModels = []
        for i in range(3):
            self.enemy =  BulletCharacterControllerNode(shape, 0.4, \'Enemy\')
          
            self.enemyNP = render.attachNewNode(self.enemy)
            self.enemyNP.setPos(points[i])
            self.enemyNP.setH(45)
            
            self.enemies.append(self.enemy)
            
            # Can\'t get enemy to collide with character
            self.enemyNP.setCollideMask(BitMask32.allOn())
            world_p.attachCharacter(self.enemy)
            self.enemiesNP.append(self.enemyNP)


            
#        ralphStartPos = Vec3(-10, 0, 0)
            self.seekerActorNP = Actor(\"models/ralph\",
                                 {\"run\":\"models/ralph-run\"})



            self.seekerActorNP.reparentTo(self.enemyNP)
            self.seekerActorNP.setScale(0.7)
            self.seekerActorNP.setH(180)
            self.seekerActorNP.setPos(0, 0, 0)
            self.enemiesModels.append(self.seekerActorNP)
            
            # Start the character in the idle position
            self.seekerActorNP.loop(\'run\')

            #        self.seeker.reparentTo(render)
#        self.seeker.setScale(0.5)
#        self.seeker.setPos(ralphStartPos)

        # Target
        self.target = loader.loadModel(\"models/arrow\")
        self.target.setColor(1,0,0)
        self.target.setPos(player.position)
        self.target.setScale(1)
        self.target.reparentTo(render)

    def update(self, task):


        self.target.setPos(player.position)

        speed = Vec3(LVector3(2,2,2))
        omega = 0.0
        radius = 30
        
        pursue = [False, False, False]
        
        for i in range(3):
            if player.getDistance(self.enemiesModels[i]) < radius:
                pursue[i] = True
                self.enemiesModels[i].lookAt(player)
                self.enemiesModels[i].setP(0)
                self.enemiesModels[i].setH(self.enemiesModels[i].getH() + 180)
                
        for i in self.enemiesNP:
            i.lookAt(player)  
           
        for i in range(3):
            if pursue[i] == True:
                print(pursue[i])
                speed.setY(11.0)
                print(speed)
                self.enemies[i].setLinearMovement(speed, True)
            else:
                speed.setY(0)
                self.enemies[i].setLinearMovement(speed, True)
        
        
        return task.cont

    def setAI(self):
        #Creating AI World
#        self.AIworld = AIWorld(render)
 

        
        #AI World update        
        taskMgr.add(self.AIUpdate,\"AIUpdate\")
        taskMgr.add(self.update,\"Position\")

        self.seekerActorNP.loop(\"run\")
        
    #to update the AIWorld    
    def AIUpdate(self,task):
        return Task.cont
        

    标签: python panda3d ursina


    【解决方案1】:

    您可以使用 ursina 平滑跟随脚本

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 2012-01-20
      • 2013-01-25
      • 2016-01-04
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多