我正在制作一个简单的小程序/游戏,我正在模拟对峙。我想要一个事件在其中一个敌人对象瞄准另一个时触发(以便它可以相应地调整其信任属性)。
在' Enemy'上课时,我已经提到了以下内容(我已经删除了具有属性和构造函数的部分,因此这并没有占用太多空间):
public event EventHandler RexAim;
public void OnRexAim()
{
if (RexAim != null)
RexAim(this, EventArgs.Empty);
}
public void RexAimAt()
{
Console.WriteLine("This is the aiming method leaping into action.");
OnRexAim();
}
然后在Program类中,我有这个:
class Program
{
static void Main(string[] args)
{
// Constructing the characters so I can use them in things:
Enemy rex = new Enemy(100, -100, 5, 2, "Rex");
Enemy pearl = new Enemy(100, -50, -5, 0, "Pearl");
Enemy archie = new Enemy(75, -100, 0, 3, "Archie");
Enemy betty = new Enemy(100, -75, 0, 5, "Betty");
pearl.RexAim += HandleRexAim;
rex.RexAimAt();
}
public static void HandleRexAim(object sender, EventArgs eventArgs)
{
Console.WriteLine("This should show up if the event worked properly.");
}
}
但是当我运行它时,我得到的只是"这是瞄准方法跃进行动"显示。
我确定我在这里犯了一个非常基本的错误(我是初学者),但我无法解决那些不能正常工作的问题。
提前感谢您对这么新的人的耐心!
答案 0 :(得分:2)
有点不清楚你在这里想要实现的目标,但我怀疑事件不一定是正确的工具。如果我理解,您需要Enemy
才能AimAt
另一个Enemy
并且会更新Trust
中的某个州(您称之为Enemy
)被瞄准。在我看来,更好的方法是做类似的事情:
public class Enemy
{
public void AimAt(Enemy opponent)
{
Console.WriteLine($"{Name} is aiming at {opponent.Name}");
opponent.AimedAt(this);
}
private void AimedAtBy(Enemy opponent)
{
// update trust between this and opponent
Console.WriteLine($"{Name} trusts {opponent.Name} less because they are pointing a gun at them!");
}
}
然后你会做类似的事情:
Enemy rex = new Enemy(100, -100, 5, 2, "Rex");
Enemy pearl = new Enemy(100, -50, -5, 0, "Pearl");
Enemy archie = new Enemy(75, -100, 0, 3, "Archie");
Enemy betty = new Enemy(100, -75, 0, 5, "Betty");
然后:
rex.AimAt(pearl);
应输出:
Rex is aiming at Pearl
Pearl trusts Rex less because they are pointing a gun at them!
有很多变量可能会进入这样的设计,但它是一个起点。
Eric Lippert撰写的这个系列是一个非常好的资源:
https://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/
答案 1 :(得分:0)
pearl.RexAim += HandleRexAim;
rex.RexAimAt();
这是你的问题。你附加了pearl.RexAim活动。然后你调用rex.RexAimAt,它会触发rex.RexAim事件,它没有附加任何内容。
要查看您期望的输出,请将其更改为“pearl.RexAimAt();”。
请阅读@Matt Burland的答案,了解有关事件/建议的更深入信息。