コード例 #1
0
    def setupCameraControl(self):
        # Disable the camera trackball controls.
        self.disableMouse()

        self.player = self.loader.loadModel("models/camera")
        self.player.reparentTo(self.render)
        self.player.setPos(0, -15, 5)
        self.camera.reparentTo(self.player)
        self.camera.setP(-10)
        # Move camera slightly forward if not the rim of the camera object shows when rotating the view
        self.camera.setY(1)

        self.clock = ClockObject.getGlobalClock()

        self.genLabelText("ESC: Quit", 0)
        self.genLabelText(KEY_FORWARD + ": Moves forward", 1)
        self.genLabelText(KEY_BACKWARD + ": Moves back", 2)
        self.genLabelText(KEY_RIGHT + ": Moves right", 3)
        self.genLabelText(KEY_LEFT + ": Moves left", 4)
        self.genLabelText("Mouse: Look around and turn", 5)

        self.accept("escape", sys.exit)
        self.keyMap = {KEY_FORWARD : False, KEY_BACKWARD : False, KEY_LEFT : False, KEY_RIGHT : False,}
        # Keep track of key presses
        self.accept(KEY_FORWARD, self.setKey, [KEY_FORWARD, True])
        self.accept(KEY_BACKWARD, self.setKey, [KEY_BACKWARD, True])
        self.accept(KEY_LEFT, self.setKey, [KEY_LEFT, True])
        self.accept(KEY_RIGHT, self.setKey, [KEY_RIGHT, True])
        # Keep track of key releases
        self.accept(KEY_FORWARD + "-up", self.setKey, [KEY_FORWARD, False])
        self.accept(KEY_BACKWARD + "-up", self.setKey, [KEY_BACKWARD, False])
        self.accept(KEY_LEFT + "-up", self.setKey, [KEY_LEFT, False])
        self.accept(KEY_RIGHT + "-up", self.setKey, [KEY_RIGHT, False])

        self.taskMgr.add(self.cameraControl, "Camera Control")
コード例 #2
0
ファイル: 4-FPSjumping.py プロジェクト: Frostlock/Panda
    def cameraControlTask(self, task):
        elapsedTime = ClockObject.getGlobalClock().getDt()
        movementSpeed = 15
        maxLookAngle = 80
        turnSpeed = 2
        if self.oobeMode == 0:
            # Mouse movement
            if self.mouseWatcherNode.hasMouse() == True:
                mpos = self.mouseWatcherNode.getMouse()
                # Up down movement does not rotate the player, only the view (only the camera)
                self.camera.setP(mpos.getY() * maxLookAngle)
                # Small left-right movement does not rotate the player, only the view (only the camera)
                # self.camera.setH(mpos.getX() * -1 * maxLookAngle)
                # Larger left-right movement also rotate the player
                if mpos.getX() > 0.25 or mpos.getX() < -0.25:
                    self.player.setH(self.player.getH() + mpos.getX() * -1 * turnSpeed)
            # Movement keys
            if self.keyMap[KEY_FORWARD] == True:
                self.player.setY(self.player, movementSpeed * elapsedTime)
            elif self.keyMap[KEY_BACKWARD] == True:
                self.player.setY(self.player, -1 * movementSpeed * elapsedTime)
            elif self.keyMap[KEY_RIGHT] == True:
                self.player.setX(self.player, movementSpeed * elapsedTime)
            elif self.keyMap[KEY_LEFT] == True:
                self.player.setX(self.player, -1 * movementSpeed * elapsedTime)
            # Jetpack
            if self.keyMap[KEY_JETPACK] == True:
                if not self.jetpackOn:
                    self.jetpackOn = True
                    # Add the jetpack force to the physical object of the playerActorNode
                    self.playerActorNode.getPhysical(0).addLinearForce(self.jetpackForce)
            else:
                if self.jetpackOn:
                    self.jetpackOn = False
                    # Remove the jetpack force to the physical object of the playerActorNode
                    self.playerActorNode.getPhysical(0).removeLinearForce(self.jetpackForce)
            # Jump
            if self.keyMap[KEY_JUMP] == True:
                if self.jumpTime <= 0:
                    print "jump"
                    self.jumpTime = 0.1
                    self.keyMap[KEY_JUMP] = False
                    self.playerActorNode.getPhysical(0).addLinearForce(self.jumpForce)
            else:
                if self.jumpTime > 0:
                    self.jumpTime -= elapsedTime
                    if self.jumpTime <= 0:
                        self.jumpTime = 0
                        self.playerActorNode.getPhysical(0).removeLinearForce(self.jumpForce)

        # OOB - Out Of Body mode
        # Enables use of standard Panda mouse control on camera
        if self.keyMap[KEY_OOB] == True:
            self.keyMap[KEY_OOB] = False
            # Toggle out of body mode
            self.oobe()

        # Done
        return task.cont