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

如何在Godot中使用C#修改实例化Sprite2D的帧?

解决Godot C#中Sprite2D无法设置frame的问题

问题核心:Sprite2D节点本身没有frame属性,多帧精灵的帧切换需要使用AnimatedSprite2D节点,或者通过Region手动裁剪图集。

方案1:改用AnimatedSprite2D(推荐)

这是Godot中处理多帧精灵的标准方式:

  1. 将你的piece.tscn场景中的Sprite2D替换为AnimatedSprite2D节点
  2. 给AnimatedSprite2D关联包含12帧的SpriteFrames资源(在编辑器中配置好动画帧)
  3. 修改C#代码如下:
var pieceScene = GD.Load<PackedScene>("res://piece.tscn"); // 现在场景根节点是AnimatedSprite2D
var wKing = pieceScene.Instantiate() as AnimatedSprite2D;
wKing.Frame = 0; // C#中属性名首字母大写,直接赋值目标帧
// 可选:如果需要自动播放动画,添加wKing.Play();
AddChild(wKing);

方案2:保留Sprite2D,通过Region裁剪图集

如果你的Sprite2D是用单张图集纹理实现多帧,可以手动计算RegionRect来切换帧:

var pieceScene = GD.Load<PackedScene>("res://piece.tscn");
var wKing = pieceScene.Instantiate() as Sprite2D;
int targetFrame = 0;
int framesPerRow = 4; // 根据你的图集每行帧数调整
Vector2 frameSize = new Vector2(64, 64); // 单帧的宽高,根据实际纹理调整

wKing.RegionEnabled = true;
// 计算目标帧在图集中的位置
wKing.RegionRect = new Rect2(
    new Vector2((targetFrame % framesPerRow) * frameSize.X, (targetFrame / framesPerRow) * frameSize.Y),
    frameSize
);
AddChild(wKing);

为什么你的代码报错?

  • Sprite2D仅用于单帧显示,没有帧切换的frame属性或set_frame方法
  • Godot C#遵循C#命名规范,属性名首字母大写(即使GDScript中是小写)

内容的提问来源于stack exchange,提问作者Jonathan Ward

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:00:07