Nur ein kleines Spiel machen und wollen mein Pausenmenü überlagern.Layering Grafiken mit Transparenz
Ein Timer ist für die Spielschleife verantwortlich. Wenn es angehalten wird, ruft es eine separate Funktion auf, die das Pause-Menü zeichnet. Jetzt zeichne ich ein kleines zentriertes Rechteck. Das Rechteck ist jedoch nicht transparent, obwohl ich es transparent mache.
Gibt es eine Möglichkeit, dass ich das tun kann?
Hier ist der Code für meine Spielschleife, die die Zustände und Züge basierend auf ihnen aktualisiert. Wie Sie sehen können, ruft das Spiel beim Pausieren eine separate Methode auf.
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();
}
}
}
}
Dies ist Pause(). Es zieht wie erwartet über den Rand, aber da es ein separates Grafikobjekt ist, zieht es sich über und ist nicht transparent, wie ich es erwartet hatte.
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();
}
}
}
}
Gibt es eine Möglichkeit, dies zu tun, damit es transparent ist?
Zeigen Sie den Code haben! – TaW
Ich habe den Code ohne alle Bits von dem, was ich zeichne, hinzugefügt, weil das irrelevant ist. Ich habe versucht, das Grafikobjekt auf verschiedene Arten zu übergeben, aber ohne Glück. – MattyMatt
Also, zeichnest du nur auf die Von? Gibt es keine anderen Kontrollen darauf? Sie wissen, dass Sie __never__ CreateGrpahics als Ergebnis verwenden sollten, das nicht gültig ist, dann sind die Grafiken, die es zeichnet, nicht persistent !? – TaW