如何解决我如何使标签或图片框不那么不透明?
我正在制作一个游戏,其中玩家的可见度有限,并且可以使用通电和检查点在整个游戏中改变这种可见度。由于我不知道如何以正确的方式实现可见性,因此我决定在播放器上放置一个标签/图片框并将其用作可见性限制器。我的问题是,我不知道如何使图片框或标签的不透明性低于同一个表单上的另一个?
解决方法
以下是您的一般问题的解决方案示例。创建一个新的 Windows 窗体应用程序项目并向窗体添加两个 PictureBox
控件和两个 Label
控件。在每个 Image
控件中设置一个 PictureBox
。将以下代码添加到表单中:
Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
With Label1
.AutoSize = False
.Size = PictureBox1.Size
.Location = Point.Empty
.Parent = PictureBox1
.BackColor = Color.FromArgb(100,100,100)
End With
With Label2
.AutoSize = False
.Size = PictureBox2.Size
.Location = Point.Empty
.Parent = PictureBox2
.BackColor = Color.FromArgb(100,100)
End With
End Sub
运行该项目,您将看到两个 PictureBox
控件与 Label
控件重叠。第一个 PictureBox
被相应的 Label
完全遮住,因为 Label
是不透明的,而第二个 PictureBox
显示通过第二个 Label
,因为BackColor
是透明的{1}} Label
。
在您的情况下,因为 Label
是 PictureBox
的父级,您仍然可以照常移动 PictureBox
,透明的 Label
将随之移动.请注意,您无法在设计器中向 PictureBox
添加子控件,因此您必须像我上面所做的那样在代码中进行。
编辑:
我不会在这里做,但值得注意的是,您实际上可以创建自己的自定义控件,该控件继承了 PictureBox
,然后在构造函数中创建了自己的子项 Label
。然后,您可以通过控件的属性公开 BackColor
的 Label
,然后可以通过该属性设置该叠加层的颜色和透明度级别。您可以选择单独显示透明度级别,或者只使用该 Color
属性的 Alpha 通道。
编辑:
我说过我不会在这里做,但这里是我上面提到的自定义控件的实现:
Imports System.ComponentModel
''' <summary>
''' A picture box control with a transparent overlay.
''' </summary>
Public Class OverlaidPictureBox
Inherits PictureBox
'The label that provides the overlay.
Private WithEvents overlayLabel As Label
''' <summary>
''' Creates a new instance of the <see cref="OverlaidPictureBox"/> class.
''' </summary>
''' <remarks>
''' The overlay color is the default back color but fully transparent.
''' </remarks>
Public Sub New()
Me.New(Color.FromArgb(0,DefaultBackColor.R,DefaultBackColor.G,DefaultBackColor.B))
End Sub
''' <summary>
''' Creates a new instance of the <see cref="OverlaidPictureBox"/> class.
''' </summary>
''' <param name="overlayColor">
''' The overlay color,including the transparency level.
''' </param>
Public Sub New(overlayColor As Color)
overlayLabel = New Label With {.BackColor = overlayColor,.Dock = DockStyle.Fill}
Controls.Add(overlayLabel)
End Sub
''' <summary>
''' The overlay color,including the transparency level.
''' </summary>
''' <returns>
''' A <see cref="Color"/> value representing the overlay color.
''' </returns>
<Category("Appearance")>
Public Property OverlayColor As Color
Get
Return overlayLabel.BackColor
End Get
Set
overlayLabel.BackColor = Value
End Set
End Property
''' <summary>
''' Occurs when the value of the <see cref="OverlayColor"/> property changes.
''' </summary>
Public Event OverlayColorChanged As EventHandler
Private Sub overlayLabel_BackColorChanged(sender As Object,e As EventArgs) Handles overlayLabel.BackColorChanged
OnOverlayColorChanged(EventArgs.Empty)
End Sub
''' <summary>
''' Raises the <see cref="OverlayColorChanged"/> event.
''' </summary>
''' <param name="e">
''' The data fr the event.
''' </param>
Protected Overridable Sub OnOverlayColorChanged(e As EventArgs)
RaiseEvent OverlayColorChanged(Me,e)
End Sub
End Class
只需将该类添加到您的项目并构建,然后新控件就会出现在工具箱中,您可以像使用任何其他控件一样使用它。默认情况下,它的行为与任何其他 PictureBox
一样,但您会在 Properties 窗口中看到一个新的 OverlayColor
属性。默认情况下应该是 (0,240,240)。您可以将前导 0 更改为最多 255 的任何其他值,您会看到叠加层变得更加不透明。如果您希望叠加层不是默认的 Control
颜色,您也可以更改其他值。
尽管执行此操作的方法因游戏引擎和语言而异,但这里有一些方法对您有用。
在播放器的屏幕上覆盖一个“小插图图像”。一个这样的图像可能是这样的:vignette image - click me 这个图像,对于一个加电功能,可以用一个稍微少一点的“黑暗”(因为没有更好的词)来代替,以增加可视区域。调整大小(增加图像的宽度和高度,并调整 x 和 y 坐标以将其保持在中间)同样有效。
在虚幻引擎中,我相信软件中有一个可编辑的属性。有关更多信息,请参阅虚幻引擎关于晕影系统的文档:unreal engine's documentation - click me
如果您需要更多帮助(关于 Unity 方法),这里有一个值得查看的资源:jimmy vegas' unity vignette tutorial - click me
让我知道这些是否有效。我不确定您是如何制作游戏的,因此我的回答可能适用于您的特定情况,也可能无效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。