为了账号安全,请及时绑定邮箱和手机立即绑定

Monogame C#:如何创建一个固定的图像网格,使其均匀地适合每个单元格?

Monogame C#:如何创建一个固定的图像网格,使其均匀地适合每个单元格?

C#
尚方宝剑之说 2022-06-12 15:14:23
我想创建一个划分为单元格的网格,这些单元格将包含不改变其尺寸的图像,但会均匀地适合网格的每个单元格。我过去的尝试没有实现这个概念,因为最后一次尝试只使用了应用于对象位置的向量列表;我想知道你将如何在网格上实现这些单元格,然后在每个单元格内放置一个图像,确保图像不会适应单元格的尺寸。//Previous vector attemptpublic int _screenHeight;public int _screenWidth;_screenWidth = GraphicsDevice.PresentationParameters.BackBufferWidth;_screenHeight = GraphicsDevice.PresentationParameters.BackBufferHeight;public List<Vector2> generateGrid(int _rows, int _cols)    {        // Example list        List<Vector2> gridPoints = new List<Vector2>();        int rows = _rows;        int cols = _cols;        int units_x = _screenWidth / rows;        int units_y = _screenHeight / cols;        for (int i = 0; i < _cols; i++)             for (int j = 0; j < _rows; j++)                gridPoints.Add(new Vector2(0 + units_x * j, 0 + units_y * i));        // returns the vector points        return gridPoints;    }我目前的理论创建一个单元格类,它通过绘制事件中的基本划分在定义的点将两个矩形(单元格和图像)嵌套在一起。
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您在之前的尝试(您的帖子中的直觉)中的直觉非常接近您想要实现的目标。Vector2您查找职位的逻辑是正确的。

由于您已经有了网格点的坐标,因此您可以将Texture2Ds 放在每个网格点位置上。

通过这样做,每个都Texture2D将使其左上角位于您分配给它的网格单元的左上角。

您也不必担心Texture2D调整 s 大小以适应网格单元格。无论何时绘制它们,它们都将使用您提供的图像文件的尺寸进行绘制。

即,如果您将153x45px图像分配给 a Texture2D,那么它153x45在绘制时仍然是像素大小。(也就是说,除非你改变了它scale,但我假设你没有。)

如果你想让Texture2D不在网格单元的左上角,那么你必须将(X,Y)坐标偏移你希望它移动的像素量。

例如,将 aTexture2D向下移动 15 个像素并向右移动 30 个像素将需要您将其原始位置更新(X + 15, Y + 30).


查看完整回答
反对 回复 2022-06-12
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

一旦你有了网格,你只需要将内部图像放在你的单元格的中心。最简单的方法是使用偏移量。根据您的示例图像,您需要将其沿 X 轴居中。

这意味着您的 X 偏移量将是

int offsetX = (cellWidth - imageWidth) / 2;

从那里您可以通过迭代网格来使用网格点(假设点 0,0 是左上角)放置图像。

Vector2 imagePoition = new Vector2(gridPoints[i].X + offsetX, gridPoints[i].Y);

如果您需要将其沿 Y 轴对齐,请对单元格高度和图像高度执行相同操作


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信