首页 新闻 会员 周边 捐助

托管生成的多个控件,怎么样可以对他们进行单独的控制

0
悬赏园豆:120 [已关闭问题]

初学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();
}
}

问题补充: 我现在写不下去了,因为觉得控制的是_diren,所有20个都是_diren,我要怎么分辨他们中的个体呢? 比如我要修改每一个_diren的速度属性 _diren.Speed = 30; 那么这个_diren是全体的20个还是其中1个,这里我想不明白怎么才能只改其中一个。 希望能回答得具体些。
tYLX的的主页 tYLX的 | 初学一级 | 园豆:80
提问于:2009-10-11 11:35
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册