【问题标题】:C# - Draw text outside, and above, pictureboxC# - 在图片框的外部和上方绘制文本
【发布时间】:2015-04-10 14:02:59
【问题描述】:

我目前正在制作一个小游戏,其中玩家是一个可以移动的 PictureBox。我正在努力在播放器上方添加一个名称标签(PictureBox)。我似乎无法将文本的 X 和 Y 位置设置在框外。它只是降落在里面。我制作了一张图片,展示并描述了我想要实现的目标:

这是我绘制角色名称的代码。顺便说一句,我的角色名称存储在变量CharacterName.charName

private void Main_Load(object sender, EventArgs e)
    {
        //Draw character name upon start
        ListToPaint.Add(new WhatToPaint { X = 10, Y = 10, Text = CharacterName.charName });
    }

    private List<WhatToPaint> ListToPaint = new List<WhatToPaint>();
    private class WhatToPaint
    {
        public int X { get; set; }
        public int Y { get; set; }
        public string Text { get; set; }
    }

    private void player_Paint(object sender, PaintEventArgs e)
    {
        //This is the "Paint" properties on my PictureBox, called Player
        e.Graphics.Clear(Color.White);
        foreach (WhatToPaint wp in ListToPaint)
        {
            e.Graphics.DrawString(wp.Text, this.Font, Brushes.Black, wp.X, wp.Y);
        }
    }

【问题讨论】:

  • winforms 不是适合游戏的技术,也不是我能想到的任何其他技术。见here
  • 很难从您提供的代码中分辨出来,但您必须将文本放在与图片框相同的容器中(而不是 在图片框内)。然后你可以使用坐标数学将它(y)像素放在图片框上方。
  • @ryanyuyu 当你说容器时,你的意思是我应该在图片框后面放一个透明面板?然后移动整个面板。在那个面板上就像一个文本标签和图片框?
  • @aliazik 类似的东西。这样,Label 和 PictureBox 将具有相同的坐标参考(因为它们在同一个容器中)。
  • @ryanyuyu 不错!但我仍然看不到任何将标签文本居中的选项。当我输入像“John”这样的短名称时,它看起来很好并且居中。但是,当我输入“来自伦敦的大约翰”之类的名字时,它有点偏右。并且属性中没有将标签文本设置为居中的选项

标签: c# winforms text draw


【解决方案1】:

如果您将标签放在与 PictureBox 相同的容器中(不在 PictureBox 内),您可以使用坐标数学将其 (y) 像素放在 PictureBox 上方

例如,您可以将标签和图片框放入透明面板中。然后,您可以将整个面板作为 Label-PictureBox 单元移动。然后 Label 和 PictureBox 将具有相同的坐标参考(因为它们在同一个容器中)。

要使标签文本居中(无论文本如何),请使用文本框的宽度来查找中点所在的位置。然后将标签偏移该中点(还有更多的坐标数学)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多