現在、私の主な描画コンポーネントとしてSwingを使って2D Javaゲームを開発中です。すべてのオブジェクトにはシャドウ(BufferedImage)がありますが、すべてのシャドウは他のシャドウと重なっています。影がお互いに重ならないようにすることは可能ですか?なぜなら、オブジェクトがその下にある場合には、影がプレイヤーに引き寄せたいからであり、オブジェクトがプレーヤーの上にある場合ではないからです。スイングでJavaゲームの2Dオーバーラップシャドウ
私はアルファ合成見てきましたが、私はソースアウトが必要推測:ここではわかりやすくするための画像ですか?私はまた、透明性のないすべての影を1つのレイヤーに描画し、それを透明度で描画することを考えましたが、以前のようにプレーヤーや他のオブジェクトを描画しません。
私はJPanelであり、paintComponentメソッドをオーバーライドするDrawオブジェクトを持っています。この方法では、現在の部屋の床を描画し、現在の部屋に属するオブジェクトのリストを繰り返して、各オブジェクトの描画メソッドを呼び出してすべてを描画します。
オブジェクトの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());
}
}
}
私の謝罪、この質問は、すでに依頼されているが、私はこのような似たような見つけることができなかった場合。
すべてのシャドウを1つのレイヤーに描画することをお勧めします。最後にあなたの影を描くなら、なぜ彼らはプレーヤーや物を描かないのでしょうか? – eldo
しかし、影が影を投じるオブジェクトを描くことはありませんか?影が部分的にオブジェクトの後ろにあるので、 –
あなたの影が現在表示されている部分のみである場合は、Nopeを指定しないでください。だから木の影は木自体を覆うことはありません。 – eldo