3 回答
TA贡献1818条经验 获得超7个赞
如果无法访问 Player 类,一种选择是仅在设定的时间间隔内检查所有玩家的 Life 变量的值。
您需要在 Game 类中保留局部变量,以跟踪 Life 变量之前设置的内容,但是每当您注意到 Life 变量的值之一发生更改时,您都可以在 Game 中执行您需要的任何代码类,这将为您提供与事件处理程序基本相同的行为(尽管可能不那么有效)。
class Game {
List<Player> playerList;
ArrayList lifeValues;
System.Timers.Timer lifeCheckTimer;
Game() {
playerList = new List<Player>();
//add all players that have been instantiated to the above list here
lifeValues = new ArrayList();
//add all the player.Life values to the above list here
//these will need to be added in the same order
lifeCheckTimer = new System.Timers.Timer();
lifeCheckTimer.Elapsed += new ElapsedEventHandler(lifeCheckElapsed);
//you can change the 500 (0.5 seconds) below to whatever interval you want to
//check for a change in players life values (in milliseconds)
lifeCheckTimer.Interval = 500;
lifeCheckTimer.Enabled = true;
}
private static void lifeCheckElapsed(object source, ElapsedEventArgs e)
{
for (int i = 0; i < playerList.Count(); i ++) {
if (((Player)playerList[i]).Life != lifeValues[i])
OnPlayerLifeChange();
lifeValues[i] = ((Player)playerList[i]).Life;
}
}
}
TA贡献1827条经验 获得超7个赞
一种常见的方法是在 Player 类中实现 INotifyPropertyChanged 接口,将 Life 从字段更改为属性,并从 setter 引发 PropertyChanged 事件。
class Player : INotofyPropertyChanged
{
private int _life;
public int Life
{
get { return _life; }
set { _life = value; OnPropertyChanged("Life"); }
}
....
}
然后游戏可以订阅所有玩家的 PropertyChanged 事件并做出相应的反应。
TA贡献1993条经验 获得超5个赞
编写 Player 类的人需要添加一个公共方法来检查变量的任何更新Life
。那么你只需要使用该方法即可。
如果这个人没有编写这样的方法,那么你就无法访问它(这就是为什么封装很重要,否则任何人都可以访问不应该访问的东西)
- 3 回答
- 0 关注
- 133 浏览
添加回答
举报