gpt4 book ai didi

xna - 在WP7 XNA 游戏中,如何在屏幕上创建一个半透明的矩形作为通知消息框?

转载 作者:行者123 更新时间:2023-12-04 16:00:32 25 4
gpt4 key购买 nike

是否可以创建一个可以在上面写多行文本的透明消息框(矩形)?

最佳答案

Andy 的解决方案就足够了,但您可能需要尝试几次才能找到所需的透明度,并且还涉及在您的程序中创建和加载新资源。幸运的是,您可以避免这种情况,并且可以通过在运行时生成单个透明像素来使过程可配置,该像素将延伸到 Rectangle 的边界。 SpriteBatch.Draw(Texture2D, Rectangle, Nullable<Rectangle>, Color) 中的参数调用:

//You can probably turn this in to a re-useable method
Byte transparency_amount = 100; //0 transparent; 255 opaque
Texture2D texture = new Texture2D(Device,1,1,false,SurfaceFormat.Color);
Color[] c = new Color[1];
c[0] = Color.FromNonPreMultiplied(255,255,255,transparency_amount);
texture.SetData<Color>(c);

现在使用新的 texture绘图调用中的变量。

至于多行文字,有一个SpriteBatch.DrawString()接受 StringBuilder 参数的重载。这意味着理论上你可以去:

//configure
StringBuilder sb = new StringBuilder();
sb.AppendLine("First line of text");
sb.AppendLine("Second line of text");

//draw
SpriteBatch.DrawString(font, sb, position, Color.White);

我会给你另一个提示,帮助你确定纹理绘制矩形的大小:

//spits out a vector2 *size* of the multiline text
Vector2 measurements = font.MeasureString(sb); //works with StringBuilder

然后您可以创建一个 Rectangle从这些信息中,甚至给它一些填充:

Rectangle rectangle = new Rectangle(window_x, window_y, (int)measurements.X, (int)measurements.Y);
rectangle.Inflate(5); //pad by 5 pixels

然后将所有内容放入绘制调用中,包括绘制窗口的颜色

SpriteBatch.Draw (texture, rectangle, Color.Black); //draw window first
SpriteBatch.DrawString(font, sb, position, Color.GreenYellow); //draw text second

结果是外观更漂亮、自动化程度更高且可配置。您应该能够将所有这些内容包装到通知消息的可重用可配置类中。

注意:除了绘图代码之外的任何内容都应该在 LoadContent() 或其他地方,而不是实际游戏的 Draw() 调用。

请原谅任何语法错误,我只是把它从我的头上写下来.. :)

关于xna - 在WP7 XNA 游戏中,如何在屏幕上创建一个半透明的矩形作为通知消息框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com