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



我想创建一个网格,该网格被划分为多个单元格,这些单元格将包含图像,这些图像不会更改其尺寸,但将均匀地放在网格的每个单元格中。我过去的尝试没有实现这个概念,因为上一次尝试只使用了应用于对象位置的向量列表;我想知道如何在网格上实现这些单元格,然后在每个单元格内放置一个图像,确保图像不适应单元格的尺寸。

//Previous vector attempt
public 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;
}

我目前的理论

  • 创建一个单元格类,通过draw事件中的基本除法将两个矩形(单元格和图像(嵌套在一起

理论示例

你在上一次尝试中的直觉(你帖子中的直觉(非常接近你想要实现的目标。您查找Vector2位置的逻辑是正确的。

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

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

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

也就是说,如果将153x45px图像指定给Texture2D,则绘制时其大小仍为153x45像素。(也就是说,除非你改变了它的scale,但我假设你没有。(

如果希望Texture2D位于网格单元的左上角,而不是,则必须将(X,Y)坐标偏移想要偏移的像素量。

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

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

这意味着你的X偏移将是

int offsetX = (cellWidth - imageWidth) / 2;

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

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

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

最新更新