You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python/Ursina引擎中创建子弹冷却进度条?

如何在Python/Ursina引擎中创建子弹冷却进度条?

嘿,我完全懂你遇到的麻烦——Ursina里默认的Entity缩放是基于自身中心的,所以你调整scale_x的时候,它会同时往左右两边拉伸,自然就和你想要的单向进度条效果不符了。别着急,咱们一步步把这个问题解决掉。

先拆解下核心问题:你现在是直接缩放整个进度条实体,但我们需要让进度条从某一侧(比如左侧)开始往单侧填充,而不是从中间向两边扩展。这里有两个简单好用的解决思路:


思路1:调整实体的原点(Origin)

Ursina里的origin属性决定了实体缩放、旋转的基准点。我们把进度条的原点设置到左侧,这样修改scale_x时,就只会往右侧延伸了。

直接修改你的代码如下:

# 先创建玩家和进度条,重点设置origin
Player = Karakter()
BulletBar = Entity(
    model="quad",
    position=(-13, -9, -2),
    scale=(12, 0.5, 1),
    color="FFFF00",
    origin=(0, 0.5)  # 关键:把缩放基准点设在左侧垂直中心
)

# 你的冷却逻辑部分保持不变,现在缩放就会单向延伸了
if mermiat == False and mertim >= 0.5:
    mermiat = True
    mertim = 0
elif mermiat == True and mertim >= 0.5:
    mertim = 0

if mermiat == True:
    BulletBar.scale_x = 12
else:
    BulletBar.scale_x = mertim * 24

这样调整后,进度条就会从左侧开始,随着mertim的增加向右填充,完美符合你的需求。


思路2:背景条+填充条的组合(更直观的方案)

如果觉得调整原点有点抽象,你可以做两层实体:一层是固定大小的深色背景条,另一层是作为填充的黄色进度条。填充条的锚点设到左侧,只需要调整它的scale_x就能实现单向填充的效果。

示例代码:

Player = Karakter()

# 先创建背景条,固定尺寸
BulletBarBackground = Entity(
    model="quad",
    position=(-13, -9, -2),
    scale=(12, 0.5, 1),
    color="333333"  # 深灰色背景,和黄色填充区分开
)

# 创建填充条,初始scale_x为0,原点设到左侧
BulletBar = Entity(
    model="quad",
    position=(-13, -9, -1),  # z轴比背景高,确保显示在上方
    scale=(0, 0.5, 1),
    color="FFFF00",
    origin=(0, 0.5),
    anchor=(0, 0.5)
)

# 冷却逻辑保持一致
if mermiat == False and mertim >= 0.5:
    mermiat = True
    mertim = 0
elif mermiat == True and mertim >= 0.5:
    mertim = 0

if mermiat == True:
    BulletBar.scale_x = 12  # 填满背景
else:
    BulletBar.scale_x = mertim * 24  # 随时间递增填充

这种方式视觉上更清晰,后续调整样式(比如加个边框)也更方便。


另外,我还可以给你的冷却逻辑提个小优化,让代码更简洁:

# 简化后的冷却判断
if mertim >= 0.5:
    if not mermiat:
        mermiat = True
    mertim = 0  # 时间到了就重置计时器,不管当前是否能射击

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:54:31