获取所有黑色像素的位置为我的画布?

时间:2015-08-11 04:20:22

标签: c# wpf wpf-controls collision-detection

我正在尝试编写一个小游戏,它现在工作得非常好,但我需要像碰撞检测这样的东西,对于那个检测来说,知道该unicode字符的excat大小很重要(可能会被转换为图形,用它来更好地工作,而不是使用标签?!)

我认为把那个元素的所有坐标都放在黑色的地方并留在透明的地方会很棒。可能是基于this的东西,但是我不太确定它是不是一个好的,快速的方法。顺便说一下,根据画布获取坐标非常重要。

到目前为止我所拥有的:

unicode字符,例如:

"\U0001F6B5"

画布的元素,我也可以使用图形对象:

var customLabel = new Label
{
    Uid= all[i].ToString().Equals("Biker")?"Biker":"",
    TabIndex = i,
    Margin = new Thickness(0),
    Content = all[i].Icon,//"\U0001F6B5"
    BorderThickness = new Thickness(2.0),
    Name = controlName,
    FontSize = 22,
    Padding = new Thickness(0.0, 0.0, 0.0, 0.0),
    ToolTip = tooltip, //may be tooltip with real pictures from that object in real life and a "Registerkare" with all its properties(armor, power,...)
    //BorderBrush = Brushes.Red //to see the size of this element
    Cursor = Cursors.Hand
    // FlowDirection= //use if the object moves left, right, top, butoom ?
    //IsHitTestVisible= //use for collision ?

}; 

//Setting the position on the canvas:

Canvas.SetLeft(customLabel, xRef); //X
Canvas.SetTop(customLabel, yRef); //Y

目前我提出了解决方案(将元素看作矩形),我只使用一次,当我创建一个随机地图时(稍后玩家将检查这些已保存的位置,通过“INotifyPropertyChanged”,如果他职位变了):

for (int xx = 1; xx <= customLabel.Width; xx++)//range for object
{
    for (int yy = 1; yy <= customLabel.Height; yy++)//range for object
    {
        coordinatesInUse.Add(new KeyValuePair<int, int>((int)xRef+xx, (int)xRef+yy));
        var lookup = coordinatesInUse.ToLookup(kvp => kvp.Key, kvp => kvp.Value);

        foreach (int look in lookup[1])
        {
            //checking wether that element exist or not
        }
    }
}

1 个答案:

答案 0 :(得分:0)

创建一个由多边形(矩形),x-cordinate和y-cordinate组成的自定义类。然后List将你的元素集合,x和y坐标放在一起。您不必每次都创建一个新的KeyValue对,而是可以使用相同的集合,只需根据需要更改值。