【发布时间】:2017-03-22 17:10:56
【问题描述】:
只是做了一个小游戏,想把我的暂停菜单放在上面。
计时器负责游戏循环。当它暂停时,它会调用一个单独的函数来绘制暂停菜单。现在我正在绘制一个小的居中矩形。然而,矩形不是透明的,即使我将其清除为透明。
有什么办法可以做到吗?
这是我的游戏循环的代码,它更新状态并根据它们进行绘制。如您所见,当游戏暂停时,它会调用一个单独的方法。
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();
}
}
}
}
这是暂停()。它按预期绘制在顶部,但因为它是一个单独的图形对象,所以它会绘制并且不像我预期的那样透明。
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();
}
}
}
}
有什么办法可以做到透明吗?
【问题讨论】:
-
显示你的代码!
-
我添加的代码没有我实际绘制的所有部分,因为这无关紧要。我尝试过以各种方式传递图形对象,但没有成功。
-
那么,您只是在 From 上绘图吗?没有其他控件吗?您确实知道您从不应该使用 CreateGrpahics,因为它无效,然后它绘制的图形是非持久的!?
-
我真的不知道你在说什么。我是个菜鸟。
-
嗯,回答我的问题将是一个好的开始 :-) - 至于其他点:只要你从 Tick 中绘制,持久性实际上可能无关紧要.. 但是没有看到绘图的代码我们如何提供帮助?至少显示 bg.Draw()。请注意 Clear(transparent) 使表单变黑,因为它试图使父级发光,但由于没有结果是黑色的..
标签: c# .net transparency gdi+ drawstring