有人能告诉我构建游戏的想法或流程会将图像块排列成完成图片。如何将图像分割成小图像并对其进行控制?(java或c#)
答案 0 :(得分:0)
我假设您正在使用Java
首先,将完成的Sliding Block拼图图像加载到内存中。这可以通过ImageIO类的读取方法轻松完成
import javax.imageio.ImageIO;
String directory = "someFolder\myImage.png";
BufferedImage image = ImageIO.read(directory);
现在让我们将图像分割成子标题。您可以使用的一种方便的方法是" getSubimage(x,y,w,h)" BufferedImage类的方法。
int rows = 3, cols = 3;
BufferedImage[][] pieces = new BufferedImage[rows][cols];
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
int pieceWidth = imageWidth/cols;
int pieceHeight = imageHeight/rows;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
pieces[i][j] = image.getSubimage(j*pieceWidth, i*pieceHeight, pieceWidth, pieceHeight);
}
}
现在,pieces[i][j]
表示当前位于第i行第j个col的子图像。所以,让我们说你想要第二行第三列中的这一部分,这将是pieces[1][2]
。
要交换两个子图像的位置,我们必须交换2D数组中的引用。
// Swaps the subimage at row1,col1 with the subimage at row2,col2
private void swapPosition(row1, col1, row2, col2)
{
BufferedImage temp = pieces[row1][col1];
pieces[row1][col1] = pieces[row2][col2];
pieces[row2][col2] = temp;
}
滑动拼图只允许您交换相邻的部分,因此您可能希望将该逻辑添加到swapPosition方法中。
我希望这能让你开始。