添加在一个NSObject的@property作为一个指针@property在另一个NSObject的
我有一个1v1的比赛,我更新到3名球员(最终4)和我正在与玩家跟踪一个问题,当用户打2个电脑玩家。添加在一个NSObject的@property作为一个指针@property在另一个NSObject的
我有一个游戏NSObject处理游戏的所有主要代码,也控制着电脑玩家的行为。在过去,我在Game.h(用户和对手)中拥有2个属性,现在我有3个(用户,对手,对手2)。声明如下:
@property (retain) Player *user;
问题出现在我需要使用控制计算机播放器操作的方法时。作为一个例子,当电脑玩家需要出价时,它必须知道出价和其他有关它的对手的信息。旧的代码片段是:
- (void)computerBiddingObjects { // ... other stuff
if (_opponentPoints == 110 && _userPoints >= 90 && _userDidBid != YES) {
bid = bidTwenty;
} else if (_opponentPoints == 115 && _userPoints >= 90 && _userDidBid != YES) {
bid = bidTwentyFive;
}
// ... other stuff
}
为了得到对对方球员的信息,一想到我是添加两个新的属性,以Player.h以便跟踪每个玩家的对手(opponent1和opponent2 )。我的问题是,如果我为每一个球员的属性,如:
_opponent.opponent = _user; _opponent.opponent2 = _opponent2;
我可以指给他们,并/或在两种情况下设置它们的各个属性?将给出上述这些语句是等价的:
_opponent.opponent.didBid = YES; _user.didBid = YES;
而且,我可以访问Player对象的属性,如投标代码片段的新版本?
- (void)computerBiddingObjectsForOpponent:(Player *)opponent { // ... other stuff
if (opponent.points == 110 && self.currentBid < bidTwenty && ((opponent.opponent1.points >= 90 && opponent.opponent1.didBid != YES) || (opponent.opponent2.points >= 90 && opponent.opponent2.didBid != YES))) {
bid = bidTwenty;
} else if (opponent.points == 115 && self.currentBid < bidTwentyFive && ((opponent.opponent1.points >= 90 && opponent.opponent1.didBid != YES) || (opponent.opponent2.points >= 90 && opponent.opponent2.didBid != YES))) {
bid = bidTwentyFive;
}
// ... other stuff
opponent.bid = bid.
}
我离开基地/偏离轨道吗?有没有更简单的方法来做到这一点?
回答:
这确实是等同的。
但是......
的didBid
会被其他球员也被设置(因为他们持同样参照该播放器,覆盖了每个球员设置。
您正在创建保留周期您可能需要手动分手(或将对手属性设置为weak
)
如果每个玩家都会为每个对手保留一个“策略”对象,并且该策略会引用这样,每个玩家都可以拥有针对其他玩家的不同策略。
以上是 添加在一个NSObject的@property作为一个指针@property在另一个NSObject的 的全部内容, 来源链接: utcz.com/qa/266972.html