[英]Calling a method in Objective-C that references another class file
我正在尝试调用一种方法来检查玩家是否大于或小于敌人。 (这是一个鱼游戏)
在EnemyFish.m中,我正在使用此方法
-(void) compareSize:(Player*)player{
if (self.fSize > player.pSize){
isBigger = true;
}
else{
isBigger = false;
}
}
然后我想在更新过程中调用此方法,所以我要这样做:
-(void) update {
[self compareSize];
//Check to see if bigger than player fish
if( isBigger == true){
//code for if bigger
}else{ //etc. }
我遇到一个例外:sharedlibrary apply-load-rules全部
不确定设置此方法的最佳方法是什么,以及调用它的最佳方法,因为[self compareSize]肯定无法正常工作。
任何帮助将不胜感激,谢谢!
------ UPDATE ----------
如果我用这个怎么办
update:(Player *)player{
我在这里遇到的问题是如何正确调用此方法,我不确定如何更改此方法才能正确调用新的update方法:
[self schedule:@selector(update) interval:1.0f/60.0f];
目前尚不清楚您在问什么,但让我们看看您的代码,看看是否有帮助。
您的第一种方法可以写得更简洁:
- (void) compareSize:(Player *)player
{
isBigger = self.fSize > player.pSize;
}
使用if
/ else
分配true
/ false
(或YES
/ NO
)值NO
意义。
查看此方法提出了一个显而易见的问题,即返回值而不是分配给实例变量是否会更好。 看起来像:
- (BOOL) compareSize:(Player *)player
{
return self.fSize > player.pSize;
}
现在可以在if
使用调用比较compareSize
。
假设compareSize
的第二个版本,您的第二个方法是:
-(void) update
{
//Check to see if bigger than player fish
if ([self compareSize]) // OOPS, no Player
{
//code for if bigger
}
else
{
//etc.
}
}
但这不起作用,因为您需要将Player
一个实例传递给compareSize:
例如[self compareSize:somePlayerInstance]
。 因此,您现在必须问自己,您希望在哪里找到Player
。 它可能是要update
的参数(例如- (void) update:(Player *)somePlayerInstance
),或者您可能有一个调用方法,该方法返回整个玩家集合,并且您需要针对每个玩家进行测试,等等,等等。我无法回答,因为我不了解您的游戏和算法!
以下评论
您必须将对Player
对象的引用存储在应用程序中的某个位置。 如果只有一个播放器, Player
器是否设计为具有sharedInstance
或类似名称的返回单个实例的类方法的单例? 如果是这样,那么您的update
将包含:
if ([self compareSize:[Player sharedInstance]])
等等
另一种设计模式是让您的应用程序委托存储引用,并提供用于访问它的方法(或属性)。 按照此模式(并组成一个类MyDelegateApp
和属性player
名称),您的代码可能类似于:
if ([self compareSize:((MyAppDelegate *)[NSApp delegate]).player])
还有一种模型是在应用程序的主XIB / NIB文件中创建单个播放器-等等,等等,有许多应用程序模型!
您“简单”(当然这并不容易)需要设计您的应用程序模型,以便您可以在需要的地方以一种或另一种方式访问单个播放器...
您的compareSize:方法(注意冒号)需要一个player参数。
因此,您需要这样称呼它:
[someEnemyFish compareSize:somePlayer]
如果self
是您想要的EnemyFish的实例,则可以执行[self compareSize:somePlayer]
,但是您的标题似乎表明self
不是EnemyFish?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.