gpt4 book ai didi

java - Java 图形的 2D 可视性( war 迷雾)

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:02 25 4
gpt4 key购买 nike

我正在制作一个 2d 游戏,我想制作 2d 可见性。所以我的想法是制作 map ,然后用另一个黑色(例如)多边形遮盖它,以便玩家可以透过黑色多边形看到 map 。所以我的想法是在黑色多边形上绘制某种洞(多边形),以便看到黑色多边形下方的 map 。我已经实现了可见性,但我不知道如何制作面具。

这就是程序目前的样子 http://prntscr.com/7y36ev

但问题是,如果黑暗中存在任何物体,它们仍然会被渲染并且玩家可以看到它们。我可以拍摄光线并查看它们是否在视线范围内,但这会有点问题,因为光线将在物体的中心拍摄,例如,如果只有它们的肩膀出现,则物体将不会被渲染。有人可以帮忙吗?

编辑 - 适合任何想要做同样事情的人我用 Path2D 做到了。首先,我使用 Path2D 制作外部多边形,然后制作内部多边形(孔)并将孔附加到外部多边形。这是示例代码:

public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);

Path2D.Double poly = new Path2D.Double();
Path2D.Double hole = new Path2D.Double();

hole.moveTo(40,40);
hole.lineTo(40,60);
hole.lineTo(60,60);
hole.lineTo(60,40);
hole.lineTo(40,40);

poly.moveTo(80,2);
poly.lineTo(80,80);
poly.lineTo(2,80);
poly.lineTo(2,2);
poly.lineTo(80,2);

poly.append(hole, true);
g2d.fill(poly);
}

最佳答案

嗨,到目前为止我明白了你的问题,当蒙版在同一位置有黑色像素时,你打算让 map 的每个像素都可见吗?如果我是对的:

获取Map的BufferedImage和Mask的BufferedImage,并使用两个for循环,检查Mask在位置(X,Y)是否有黑色像素,如果有,则将Map的像素添加到新的BufferedImage的位置(X,Y),否则将黑色像素添加到结果BufferedImage的位置(X,Y)。

编辑:一点伪代码

BufferedImage mapBI = .... // the map as BufferedImage
BufferedImage maskBI = .... // the mask as BufferedImage
BufferedImage resultBI = ... // new BufferedImage with same size as mask

for (i=0; i< maskBI.width; i++){
for(j=0; j< maskBI.height; j++){
if (maskBI.pixelAt(i,j) == blackPixel){
resultBI.setPixel(i,j,mapBI.pixelAt(i,j));
}else{
resultBI.setPixel(i,j,blackPixel);
}
}
}

希望你明白我的意思。

关于java - Java 图形的 2D 可视性( war 迷雾),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com