ちょっとした試合をして、一時停止メニューを上に重ねたいと思う。透明なグラフィックをレイヤー化する
タイマーはゲームループを担当します。一時停止すると、一時停止メニューを描画する別の機能が呼び出されます。今、私は小さな中心の四角形を描画しています。しかし、矩形は透明ではありませんが、透明ではありません。
どうすればいいですか?
ここでは、状態を更新し、それらに基づいて描画する私のゲームループのコードです。ご覧のように、ゲームが一時停止すると、別の方法が呼び出されます。
private void tmrGameLoop_Tick(object sender, EventArgs e)
{
if (Paused)
{
Pause();
return;
}
using (Graphics gr = CreateGraphics())
{
using (BufferedGraphicsContext bgc = new BufferedGraphicsContext())
{
using (BufferedGraphics bg = bgc.Allocate(gr, DisplayRectangle))
{
bg.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
bg.Graphics.Clear(Color.Transparent);
// draw the stuff
bg.Render();
}
}
}
}
これはPause()です。期待どおりに上に描画されますが、それは別のグラフィックスオブジェクトなので、描画され、透明ではありません。
private void Pause()
{
using (Graphics gr = CreateGraphics())
{
using (BufferedGraphicsContext bgc = new BufferedGraphicsContext())
{
using (BufferedGraphics bg = bgc.Allocate(gr, m_menu))
{
bg.Graphics.Clear(Color.Transparent);
// draw pause menu
bg.Render();
}
}
}
}
透明にする方法はありますか?
は、コードをお見せ持ってる! – TaW
私は実際に描いているもののすべてを除いてコードを追加しましたが、これは無関係であるためです。私は様々な方法でグラフィックオブジェクトを渡してみましたが、運がありません。 – MattyMatt
だから、あなたは「From」の上に描いていますか?他のコントロールはありませんか?あなたは__never__がCreateGrpahicsを結果として使用しなければならないことを知っています。それは有効ではないので、描画するグラフィックスは非永続的です! – TaW