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

【作品介绍】
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