1

Connect 4 ゲームの最後のゲームを終了しています。タイルをスロットに表示するだけでなく、実際にドロップダウンさせたいと思っていましたが、z オーダーの問題があります。

シーンを描くには、まずボードの長方形を描き、背景色で塗りつぶして穴を開けます。問題は、タイルのスペースがないことです。何よりも先にタイルを描いてみました。ドロップダウンしますが、穴の後ろには見えません。タイルの上に黄色一色の上に黒一色で描かれているからです。黄色が最初に描画されるため、黒の後に描画することはできませんが、黄色の前にも描画できません。ここにきれいな写真があります:

プレイボード。

解決策にはいくつかの可能性がありますが、それぞれに問題があります。

  1. 穴がすでに切り取られているボードのビットマップを使用します。

    • タイルを描画してから、透明度キーを使用して奇妙な形のフレームを描画できました。
    • StretchBlt異なるアスペクト比を含む異なる解像度で同じように見えるように実際にボードを引き伸ばすでしょうか? 写真を参考にすると、どの解像度でもこのようにウィンドウにフィットします。
  2. ピクセルごとに移動し、何を描画するかを確認します。

    • シンプルだけど、すごく遅くない?各ピクセルを通過するのはそうではないかもしれないと聞いたことがありますが、実際にはどこでも確認していません.
  3. (私が最もうまくいくと思うもの) - ボードを描画しますが、上部のブラック ホールの代わりに、それらの領域でボードを透明にします。

    • これは最小限の作業量であり、効率的には問題ないはずですが、どうすればこれを行うことができるでしょうか?

これらの解決策 (特に 3 番目の解決策) は妥当ですか? それ以外の場合、この z オーダーの問題を解決する簡単な方法はありますか?

4

1 に答える 1

2

後で穴を追加するのではなく、最も「正しい」方法(必ずしも最良の方法であるとは限りません)は、長方形の形状を穴で埋めることです。

GDI または GDI+ を使用している場合は、四角形とその中のすべての円でパスを作成し、そのパスを埋めることでこれを行うことができます。

gdi32 でこれを行うには、BeginPath を呼び出し、Rectangle 関数と Ellipse 関数を使用してパスに図形を追加し、EndPath を呼び出してパスを終了します。HDC を ALTERNATE モードに設定するには、SetPolyFillMode を使用します。HDC で適切なブラシを選択し、FillPath を呼び出します。

GDI+ では、代替モードでパスを作成し、GraphicsPath::AddRectangle と GraphicsPath::AddEllipse で図形を追加し、Graphics::FillPath で塗りつぶします。

(交互モードではなくワインディング モードでこれを行うこともできますが、その場合、パスの形状を作成する線が時計回りか反時計回りかについて注意する必要があります。)

于 2012-06-10T04:17:32.617 に答える