猫史档案馆


【Python作品分享】FPS完成版【作品秀】

用户:Camel3BzvCamel3Bzv查看:0 回复:1 评论:0 创建时间:2023-06-03T11:16:53


【作品展示】

center_image

 

【作品介绍】

移动方法:WASD

 

【作品源代码】

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from ursina.shaders import lit_with_shadows_shader

app = Ursina()

Entity.default_shader = lit_with_shadows_shader

DirectionalLight(y=2,rotation=(45,45,0))

Sky()

ground = Entity(model = 'plane',collider = 'box',scale = 喵,texture = 'grass')

for i in range(16):
    Entity(model = 'cube',scale = 2,texture = 'brick',
        texture_scale = (1,2),
        x = random.uniform(-8,8),
        z = random.uniform(-8,8)+8,
        collider = 'box',
        scale_y = random.uniform(2,3),
        origin_y = -0.5)

editor_camera = EditorCamera(enabled = False)

def input_pause(key):
    if key == 'tab':
        editor_camera.enabled = not editor_camera.enabled
        mouse.locked = not editor_camera.enabled
        player.cursor.enabled = not editor_camera.enabled
        player.visible_self = editor_camera.enabled
        editor_camera.position = player.position

pause_handler = Entity(input = input_pause)

player = FirstPersonController(model = 'cube',color = color.orange,z = -10,origin_y = -0.5,speed = 8,collider = 'box')

喵 = Entity(model = 'cube',parent = camera,scale = (0.3,0.2,0.5),position = (0.5,-0.25,0.5),color = color.red,on_cooldown = False)
喵.flash = Entity(parent = 喵,model = 'quad',z = 1,color = color.yellow,enabled = False)

def shoot():
    if not 喵.on_cooldown:
        #print("+10")
        喵.on_cooldown = True
        喵.flash.enabled = True
        from ursina.prefabs.ursfx import ursfx
        ursfx([(0.0,0.0),(0.1,0.9),(0.15,0.75),(0.3,0.14),(0.6,0.0)],volume=0.5,wave='noise',
              pitch=random.uniform(-13,-12),pitch_change=-12,speed=3.0)
        invoke(喵.flash.disable,delay = 0.15)
        invoke(setattr,喵,'on_cooldown',False,delay = 0.15)
        if mouse.hovered_entity and hasattr(mouse.hovered_entity,'hp'):
            mouse.hovered_entity.blink(color.red)
            mouse.hovered_entity.hp -= 10
            if mouse.hovered_entity.hp <= 0:
                destroy(mouse.hovered_entity)
            mouse.hovered_entity.health_bar.scale_x = mouse.hovered_entity.hp/mouse.hovered_entity.max_hp * 1.5

def update():
    if held_keys['left mouse']:
        shoot()

class Enemy(Entity):
    def __init__(self,add_to_scene_entities = True,**kwargs):
        super().__init__(add_to_scene_entities,
                         model = 'cube',collider = 'box',
                         scale_y = 2,origin_y = -0.5,
                         color = color.light_gray,**kwargs)
        self.health_bar = Entity(parent = self,model = 'cube',color = color.red,y = 1.2,
                                 scale = (1.5,0.1,0.1))
        self.max_hp = 100
        self.hp = self.max_hp

    def update(self):
        self.look_at_2d(player.position,'y')

        hit_info = raycast(self.position+Vec3(0,1,0),self.forward,30,ignore=(self,),debug=True)
        if hit_info.entity == player:
            if distance_xz(self.position,player.position)>2:
                self.position = self.position + self.forward*time.dt*5

for i in range(4):
    Enemy(x = i*8)

app.run()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
扬清风扬清风

good!建议你去研究一下UE5!emotion_编程猫_加油

点赞0


评论