我正在使用Swing作为我的主要绘图组件开发一个2D Java游戏。每个物体都有一个阴影(BufferedImage),但是每个阴影都会重叠其他阴影。是否可能只让阴影不彼此重叠?因为如果物体在玩家下面,我仍然希望阴影绘制在玩家上方,而如果物体在玩家上面,则不需要绘制在玩家上方。这里有一张图片以便更清楚地理解:
抱歉如果这个问题已经被问过了,但我找不到类似的东西。
我已经看过了alpha合成,我想我需要Source Out吗?我也考虑过将所有阴影(没有透明度)绘制在一个图层上,然后用透明度绘制它,但那样就无法像之前那样绘制在玩家和其他物体上。
我有一个Draw对象,它是一个JPanel并覆盖了paintComponent方法。在这个方法中,我首先绘制当前房间的地板,然后迭代当前房间的物体列表,并调用每个物体的draw方法来绘制所有东西。
物体绘制方法:
public void draw(Graphics g) {
if (visible && checkInScreen()) {
// The required drawing location
int drawLocationX = getX() - globalCameraX;
int drawLocationY = getY() - globalCameraY;
if (shadow) {
g.drawImage(shadowImages.get(imageIndex),
drawLocationX + shadowOffset.x + (getImageWidth()/2),
drawLocationY + shadowOffset.y, null);
}
g.drawImage(images.get(imageIndex), drawLocationX, drawLocationY, null);
//Collisionbox
if (SHOW_COLLISION_BOXES){
g.setColor(Color.WHITE);
g.drawRect(drawLocationX + getCollBoxX(), drawLocationY + getCollBoxY(), getCollBoxW() - getCollBoxX(), getCollBoxH() - getCollBoxY());
}
}
}
抱歉如果这个问题已经被问过了,但我找不到类似的东西。