如何在Godot 3.5.1中缩放数组内存储的StreamTexture纹理?
Godot 3.5.1 纹理缩放绘制实现方法
在Godot 3.5.1中,draw_texture函数没有直接接收缩放向量的参数,你可以通过以下两种方式实现纹理的缩放绘制:
方法一:使用draw_texture_rect绘制缩放后的矩形区域
通过计算纹理缩放后的尺寸,构建居中的绘制矩形来实现缩放效果:
for splash_planet in splash_planets: var center = Vector2(splash_planet._x, splash_planet._y) var texture = splash_planet._texture # 自定义缩放因子 var scale_x = 0.5 var scale_y = 0.5 # 计算缩放后的纹理尺寸 var scaled_size = texture.get_size() * Vector2(scale_x, scale_y) # 构建以center为中心的绘制矩形(左上角坐标 = 中心 - 缩放尺寸的一半) var draw_rect = Rect2(center - scaled_size / 2, scaled_size) # 绘制缩放后的纹理(第三个参数设为false表示不平铺) draw_texture_rect(texture, draw_rect, false)
方法二:使用Transform2D应用缩放变换
通过构建包含缩放的变换矩阵,结合draw_texture实现更灵活的变换绘制:
for splash_planet in splash_planets: var center = Vector2(splash_planet._x, splash_planet._y) var texture = splash_planet._texture # 自定义缩放因子 var scale_x = 0.5 var scale_y = 0.5 # 构建变换:先将纹理中心对齐到目标位置,再应用缩放 var transform = Transform2D() # 平移到目标中心 transform.translate(center) # 以中心为原点缩放 transform.scale(Vector2(scale_x, scale_y)) # 平移回纹理左上角的初始偏移(确保纹理居中) transform.translate(-texture.get_size() / 2) # 应用变换绘制纹理(第二个参数设为Vector2.ZERO,因为变换已包含位置信息) draw_texture(texture, Vector2.ZERO, transform)
两种方法的适用场景:
- 若仅需简单缩放,
draw_texture_rect更直观易读 - 若后续需要添加旋转、倾斜等其他变换,
Transform2D的方式扩展性更强
内容的提问来源于stack exchange,提问作者Ian McCurdy
相关产品推荐
相关产品推荐

