Java 仿射变换&setClip()问题
已解决: 我正在制作一个平铺2d游戏,遇到了一个问题。我的游戏允许用户使用任意形状的画笔类型创建地图,该画笔类型被缓存为所使用的每种绘画类型的区域。一旦我有了给定绘制的缓存区域,我就将这些区域从整个地图上每个100×100平铺的交点分离为平铺Path2D形状。问题是,当我在查看区域内仿射变换瓷砖并将其设置为用于绘制的剪辑时,显然形状与原来的形状是断开的Java 仿射变换&setClip()问题,java,clipping,2d-games,affinetransform,path-2d,Java,Clipping,2d Games,Affinetransform,Path 2d,已解决: 我正在制作一个平铺2d游戏,遇到了一个问题。我的游戏允许用户使用任意形状的画笔类型创建地图,该画笔类型被缓存为所使用的每种绘画类型的区域。一旦我有了给定绘制的缓存区域,我就将这些区域从整个地图上每个100×100平铺的交点分离为平铺Path2D形状。问题是,当我在查看区域内仿射变换瓷砖并将其设置为用于绘制的剪辑时,显然形状与原来的形状是断开的 for(int y = 0; y < host_frame.getHeight(); y+=100){
for(int y = 0; y < host_frame.getHeight(); y+=100){
for(int x = 0; x < host_frame.getWidth(); x+=100){
host.setClip(AffineTransform.getTranslateInstance(CamX, CamY).createTransformedShape(paint_tiles.get(paint_textures.get(i)).get(new Point(x,y))));
host.drawImage(paint_textures.get(i).getImage(), x, y, host_frame);
}
}
一个实际的测试需要更少的猜测和更好的回答。你可以先不去玩这个clipping@MadProgrammer我必须使用setClip方法,在每个瓷砖内绘制非方形形状时,我没有其他选择。请注意,有两种不同类型的油漆用于草地和海洋。首先,我从草砖开始,草砖的一部分没有填满,因为从我画海洋到绘图区域的一部分创建了一个洞。我将重新发布一个可运行的示例。@MadProgrammer发现了这个问题,感谢您让我测试这个概念,否则就无法解决这个问题。问题是当剪辑在另一个点时,我在一个点绘制平铺图像。我犯了个愚蠢的错误。呵呵,剪辑很有趣:。别忘了重置它;不,只是个潜伏者;
host.drawImage(paint_textures.get(i).getImage(), AffineTransform.getTranslateInstance(CamX, CamY).createTransformedShape(paint_tiles.get(paint_textures.get(i)).get(new Point(x,y))).getBounds().x,AffineTransform.getTranslateInstance(CamX, CamY).createTransformedShape(paint_tiles.get(paint_textures.get(i)).get(new Point(x,y))).getBounds().y, host_frame);