显示 Spritesheet 的帧

Posted

技术标签:

【中文标题】显示 Spritesheet 的帧【英文标题】:Show Frames of a Spritesheet 【发布时间】:2021-04-18 18:07:31 【问题描述】:

我没有太多 C# 经验,但是我正在编写一个程序来帮助修改另一个游戏。我希望制作一个允许您预览 Spritesheet 帧的表单。每帧为 16x32 像素,纸张宽度不能超过 64 像素,但最长可达 4096 像素。我问过我认识的人,但他们无法给我任何开始的地方。我没有代码,因为我什至不确定如何开始。它不需要动画,只需要静态图像。

编辑:我把它放在 WinForm 上。我只需要这个小矩形。

【问题讨论】:

假设您正在为 Windows(而不是跨平台)构建,那么开始的地方是 System.Drawing.Bitmap。 docs.microsoft.com/en-us/dotnet/api/…您应该可以在线找到示例,您可以根据自己的目的进行修改 这是朝着正确方向迈出的一步,它的示例代码显示了如何制作整个图像,所以我需要弄清楚如何找出如何仅显示 16x32 帧 将图像加载到设置为自动调整大小的 Picturebox 中。将 pbox 放到具有 autoscroll=true 的面板上。 .如果您将面板的大小设置为 16x32 + 滚动条宽度的客户端大小,您就完成了 这几乎是我所需要的,目的是让用户选择一个帧号并点击查看它。如果是他们想要的帧,点击另一个按钮将帧号添加到列表中. 【参考方案1】:

感谢所有快速回答的人。我被指出了正确的方向,我设法构建了这段代码: 首先我做了这个:

public Rectangle GetTileArea(int tileIndex, int tileWidth, int tileHeight, int sheetWidthInTiles)

    int x = tileIndex % sheetWidthInTiles;
    int y = tileIndex / sheetWidthInTiles;
    return new Rectangle(x * tileWidth, y * tileHeight, tileWidth, tileHeight);

然后我要做的就是:

private void seeFrame_Click(object sender, EventArgs e)

    try
    
        //Get Spritesheet
        image1 = new Bitmap(Environment.CurrentDirectory + $"\\Export\\[CP]systemName\\assets\\img\\spritesheet.png");
        Rectangle pixelAreaForTile = this.GetTileArea(tileIndex: (int)frameCount.Value, tileWidth: 16, tileHeight: 32, sheetWidthInTiles: 4);               // Rectangle rect = new Rectangle(xmin, ymin, xmaximum, ymaximum);
        Bitmap spriteFrame = image1.Clone(pixelAreaForTile, PixelFormat.DontCare);
        pictureBox1.Image = spriteFrame;

    
    catch (Exception ex)
    

    


【讨论】:

以上是关于显示 Spritesheet 的帧的主要内容,如果未能解决你的问题,请参考以下文章

在 Unity 中来自 spritesheet 的动画异相

Cocos2D SpriteSheet动画问题,我的帧数要大很多

EaselJS 动画虽然基于当前帧的帧

在 Tkinter 中使用 Spritesheets

如何使用多个精灵表? cocos2d/iPhone

XNA SpriteSheet 不工作