猫史档案馆


【Python作品分享】player【作业帖】

用户:淳朴的蓝甲虫jePu淳朴的蓝甲虫jePu查看:47 回复:0 评论:0 创建时间:2023-07-03T16:02:01


【作品展示】

center_image

 

【作品介绍】

a

 

【作品源代码】

#导入功能模块
from actor import *
import random
#定义玩家角色类


class Player(LoadActor):
    def __init__(self):
        super().__init__("aduan", {
              "walk": "aduan_walk", "stand": "aduan_stand"}, (-600, -60, 0), "player", 20, 100)
        self.acceleration = 500
        base.pusher.addCollider(self.collider, self.actor)
        base.cTrav.addCollider(self.collider, base.pusher)
        self.actor.setScale(4.5)
        #添加射线碰撞体
        self.ray = CollisionRay(0, 0, 0, 0, -1, 0)
        rayNode = CollisionNode("playerRay")
        rayNode.addSolid(self.ray)
        self.ray_collision = self.actor.attachNewNode(rayNode)
        #设置球体碰撞体的蒙版状态
        mask = BitMask32()
        mask.setBit(0)
        self.collider.node().setIntoCollideMask(mask)
        mask = BitMask32()
        mask.setBit(0)
        self.collider.node().setFromCollideMask(mask)
        #设置射线碰撞体的蒙版状态
        mask = BitMask32()
        self.ray_collision.node().setIntoCollideMask(mask)
        mask = BitMask32()
        mask.setBit(1)
        self.ray_collision.node().setFromCollideMask(mask)
        #添加列表碰撞处理机制
        self.ray_queue = CollisionHandlerQueue()
        base.cTrav.addCollider(self.ray_collision, self.ray_queue)
        #加载激光武器
        self.laser_weapon = loader.loadModel("laser")
        self.laser_weapon.reparentTo(self.actor)
        #设置武器伤害值
        self.harm_value = -3
        #设置时间间隔
        self.harm_interval_time = 0.5
    # 定义玩家角色移动方法,

    def aduan_move(self, keys, woodmen, dt):
        LoadActor.move(self, dt)
        self.walking = False
        self.laser_weapon.setSy(8*(1/13))
        #控制角色前进
        if keys["up"]:
            self.velocity.addY(self.acceleration*dt)
            self.walking = True
            base.cam.setPos(self.actor, (0, 60, 150))
            base.cam.setHpr(self.actor, (180, -65, 0))
         #控制角色左转
        if keys["left"]:
            self.actor.setH(self.actor.getH() + 1)
            self.walking = True
            base.cam.setPos(self.actor, (0, 60, 150))
            base.cam.setHpr(self.actor, (180, -65, 0))
            self.velocity = Vec3(0, 0, 0)
           #控制角色右转
        if keys["right"]:
            self.actor.setH(self.actor.getH() - 1)
            self.walking = True
            base.cam.setPos(self.actor, (0, 60, 150))
            base.cam.setHpr(self.actor, (180, -65, 0))
            self.velocity = Vec3(0, 0, 0)
         #判断动画播放状态
        if self.walking:
            walk_control = self.actor.getAnimControl("walk")
            if not walk_control.isPlaying():
                self.actor.loop("walk")
        else:
            self.actor.loop("stand")
        #获取碰撞信息
        if keys["shoot"]:
            if self.ray_queue.getNumEntries() > 0:
                self.ray_queue.sortEntries()
                ray_information = self.ray_queue.getEntry(0)
                if ray_information.getIntoNode().getName() == "woodmen":
                    collision_position = ray_information.getSurfacePoint(
                        render)
                    collision_distance = (
                        collision_position - self.actor.getPos()).length()
                    self.laser_weapon.setSy(collision_distance*(1/13))
                    self.harm_interval_time -= dt
                    if self.harm_interval_time <= 0:
                        woodmen.count_health(self.harm_value)
                        print("木头人生命值:", woodmen.health)
                        self.harm_interval_time = random.uniform(0.6, 1.2)

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页第 1 页 / 共 0 页下一页