初学C#+Silverlight
用C#+Silverlight做个防守游戏,用for控制生成了20个敌人控件,同时出现,每个随机给定了生成位置的坐标,加了动画代码,每个都会直线向地图中心移动,给一个炮台,位置是自己拖放的,当敌人离炮台距离60时炮台自动开火。
问题:
炮台需要判定哪一个敌人离自己最近。这里我不明白怎么才能判断单个的敌人,因为控件都是一样的,不同的是敌人.Name 和坐标,本来想用初始坐标得到的值来进行对比,可是这样不准确,因为每个敌人的移动速度都不一样,所以应该让炮台在特定时间自己去找每一个敌人作对比,设定离自己最近的,击毁后在对比剩下的。
希能弄明白这样托管生成的多个控件,怎么样可以对他们进行单独的控制。
我现在只能控制敌人,而不是敌人1或者敌人n。
我的代码大体如下:
private void StartButton_Click_1(object sender, RoutedEventArgs e)
{//生成敌军并开始攻击
Random ro = new Random();
double XUp;
double YUp;
for (i = 1; i <= 20; i++)
{
XUp = 600;
X = ro.Next((int)XUp);
YUp = 400;
Y = ro.Next((int)YUp);
DiRen _diren = new DiRen();
_diren.Money = 1;
_diren.Speed = 15;
_diren.Health = 1000;
_diren.Level = 1;
_diren.Name = "敌人" + i + "";//让生成每个敌人都有自己独有的名字
_diren.SetValue(Canvas.TopProperty, Y);
_diren.SetValue(Canvas.LeftProperty, X);
Ca.Children.Add(_diren);
double Utime = Helper.Distance(iResult, PA) / _diren.Speed;//根据敌人到中心点的距离除以其速度得出动画时间
Duration duration = new Duration(TimeSpan.FromSeconds(Utime));
DoubleAnimation PAl = new DoubleAnimation();
DoubleAnimation PAt = new DoubleAnimation();
PAl.Duration = duration;
PAt.Duration = duration;
Storyboard sbufo = new Storyboard();
Ca.Resources.Remove("mysbufo");//不加这句报错,应该是托管批量的问题
sbufo.Duration = duration;
sbufo.Children.Add(PAl);
sbufo.Children.Add(PAt);
Storyboard.SetTarget(PAl, _diren);
Storyboard.SetTarget(PAt, _diren);
Storyboard.SetTargetProperty(PAl, new PropertyPath("(Canvas.Left)"));
Storyboard.SetTargetProperty(PAt, new PropertyPath("(Canvas.Top)"));
PAl.To = 300;
PAt.To = 200;
Ca.Resources.Add("mysbufo", sbufo);
sbufo.Begin();
}
}