如何在Ursina中获取实体宽高?实现打砖块游戏球自动定位
Ursina引擎中获取实体尺寸并自动对齐球与挡板位置的方法
我正在用Python的Ursina引擎制作打砖块游戏,已经创建了挡板(bar)和球(ball)实体:
bar = Entity(model='quad', color=color.blue, position=(4.5, -10, 0), scale=(3, 0.3), collider='box') ball = Entity(model='sphere', color=color.red, position=(4.5, -9.5, 0), scale=0.25, collider='sphere')
我希望不用手动设置x、y坐标,让球自动位于挡板的上方中心位置,但尝试调用bar.width时提示‘Entity’对象没有该属性,请问该如何获取实体的宽高并实现自动对齐?
解决方案
Ursina的Entity本身没有直接的width/height属性,实体的实际尺寸由模型原始尺寸和实体scale共同决定:
- 对于
quad(四边形)模型,它的原始尺寸是1×1单位,因此实体的实际宽度等于scale.x,实际高度等于scale.y。 - 对于
sphere(球体)模型,原始直径为1单位,所以球体的半径是scale / 2。
要让球自动对齐挡板上方中心,只需基于挡板的位置和尺寸计算球的坐标:
- x坐标直接复用挡板的
x值,保证水平居中; - y坐标为挡板的
y值,加上挡板高度的一半(bar.scale.y / 2),再加上球的半径(ball.scale / 2),确保球刚好贴在挡板上方。
修改后的代码如下:
from ursina import * app = Ursina() bar = Entity(model='quad', color=color.blue, position=(4.5, -10, 0), scale=(3, 0.3), collider='box') # 计算球的目标位置 ball_radius = 0.25 / 2 ball_y_position = bar.y + bar.scale.y / 2 + ball_radius ball = Entity(model='sphere', color=color.red, position=(bar.x, ball_y_position, 0), scale=0.25, collider='sphere') app.run()
如果后续使用其他自定义模型,可以通过entity.model.size获取模型的原始尺寸,再结合scale计算实际大小:
# 示例:获取自定义模型的实际宽度 actual_width = bar.model.size[0] * bar.scale.x
内容的提问来源于stack exchange,提问作者Shahriar
相关产品推荐
相关产品推荐

