軍隊が建物を攻撃できる状況があります。各部隊は、そのターゲットへのポインターを保持します。
@property (nonatomic, weak) Building *target;
更新ループでは、部隊は定期的にターゲットにダメージを与えます。
if (_target)
{
if (/*enough time has passed since last attack, attack again*/)
{
[_target attack];
if (_target.health <= 0)
{
[_target removeFromParentAndCleanup:YES]; //Cocos2d
_target = nil;
}
}
}
else /* Find new target */
問題は:
troop1
倒れた一撃を与え、次にbuilding1
進むbuilding2
troop2
攻撃してbuilding1
いましたが、次の攻撃まで待って、building1
現在nil
.
問題は、troop2
のポインターが nil に設定されていないことであり、代わりにポインターの値が nil であることを確認する必要があることに気付きました。
使用してみif (*_target)
ましたが、メッセージが表示されました
ステートメントにはスカラー型の式が必要です
Objective-Cでこの種の比較を実現する方法があれば? 値がいつ変更されたかを判断するための他のオプションは何ですか? KVO? いくつかの広範なデリゲート パターン?