【问题标题】:VB.NET Draw on top of rectangle e.GraphicsVB.NET 在矩形 e.Graphics 上绘制
【发布时间】:2015-06-15 01:56:05
【问题描述】:

我想使用e.Graphics 在我的表单上绘图。所以我画了一组矩形(用于我正在制作的游戏的棋子),现在我想在已经绘制的(和工作的)矩形上绘制棋子。棋子是透明的 png,保存在我的 Resources 文件夹中。我正常绘制它们没有问题,但是每当我想在图块上绘制它们时,只有图块是可见的——不管哪一行代码先行。如何在瓷砖顶部添加碎片,以便瓷砖在下方?

这是有问题的代码:

If Not alreadydrawn Then
    Dim g As Graphics = Graphics.FromImage(screenbuffer)
    Checked = False
    For y = 1 To 8
        For x = 1 To 8
            If Checked Then g.FillRectangle(Brushes.LightGray, (x * 85) - 40, (y * 85) - 40, 85, 85)
            If Not Checked Then g.FillRectangle(Brushes.Black, (x * 85) - 40, (y * 85) - 40, 85, 85)
            Checked = Not Checked
        Next
        Checked = Not Checked
    Next
    e.Graphics.DrawImage(My.Resources.Bishop_White, New Rectangle(New Point(50, 50), New Size(64, 64)))
    alreadydrawn = True
End If
e.Graphics.DrawImageUnscaledAndClipped(screenbuffer, New Rectangle(New Point(0, 0), New Size(795, 805)))

【问题讨论】:

  • 嗯,你为什么不创建一个空的板资源,设置一个图片框并指向它,然后在顶部的透明控件中绘制你的作品.
  • @TonyHopkinson 董事会资源是什么意思?位图?
  • 是的。这样你就不必一直重绘它。当您的棋子重新绘制时,收卷机将自行处理电路板。再说它不会变,为什么还要重新粉刷呢?
  • 这就是我对alreadydrawn = True 所做的事情。我的问题是我不能同时看到两者。 This 是我尝试在另一个之上添加一个时发生的情况。 IE。我添加的部分(见Bishop_White)没有出现。
  • 完全不是我的意思。在一个控件上绘制棋盘,在其上的另一个透明控件上绘制棋子。

标签: vb.net graphics png


【解决方案1】:

这是我提出的解决方案:

checked = False
For y = 1 To 8
    For x = 1 To 8
        If clickedsquare(0) = x - 1 And clickedsquare(1) = y - 1 And Not boardlayout(y - 1, x - 1) = 0 And clickmode = "options" Then
            t.FillRectangle(New SolidBrush(Color.FromArgb(225, 212, 128)), x * 75, y * 75, 75, 75)
        Else
            If checked Then t.FillRectangle(New SolidBrush(Color.FromArgb(64, 64, 64)), x * 75, y * 75, 75, 75)
            If Not checked Then t.FillRectangle(New SolidBrush(Color.FromArgb(224, 224, 224)), x * 75, y * 75, 75, 75)
        End If
        checked = Not checked
    Next
    checked = Not checked
Next

...

然后:

tiles.Image = tilebuffer
pieces.Image = piecebuffer
BackgroundImage = tiles.Image
pieces.BackColor = Color.Transparent
alreadydrawn = True

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多