Iphone 在Objective-C中调用引用其他类文件的方法
我试图调用一种方法来检查玩家是比敌人大还是比敌人小。(这是一种鱼类游戏) 在EnemyFish.m中,我正在使用此方法Iphone 在Objective-C中调用引用其他类文件的方法,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我试图调用一种方法来检查玩家是比敌人大还是比敌人小。(这是一种鱼类游戏) 在EnemyFish.m中,我正在使用此方法 -(void) compareSize:(Player*)player{ if (self.fSize > player.pSize){ isBigger = true; } else{ isBigger = false; } } 然后我想在更新过程中调用此方法,因此我将执行以下操作: -(void) update { [self compareSize
-(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应用所有加载规则
不确定设置此方法的最佳方式是什么,以及调用它的最佳方式,因为[self compareSize]肯定不起作用
任何帮助都将不胜感激,谢谢
------更新----------
如果我用这个呢
update:(Player *)player{
我在这里遇到的问题是如何正确调用此方法,我不确定如何更改此方法以正确调用新的更新方法:
[self schedule:@selector(update) interval:1.0f/60.0f];
您的compareSize:method(注意冒号)需要一个player参数
所以你需要这样称呼它:
[someEnemyFish比较:somePlayer]
如果self
是您想要的EnemyFish实例,您可以执行[自我比较:somePlayer]
,但您的标题似乎表明self
不是EnemyFish 您的compareSize:method(注意冒号)需要一个player参数
所以你需要这样称呼它:
[someEnemyFish比较:somePlayer]
如果
self
是您想要的EnemyFish实例,您可以执行[自我比较:somePlayer]
,但您的标题似乎表明self
不是EnemyFish 不清楚您在问什么,但让我们看看您的代码,看看它是否有帮助
您的第一个方法可以更简洁地编写为:
- (void) compareSize:(Player *)player
{
isBigger = self.fSize > player.pSize;
}
使用if
/else
分配true
/false
(或YES
/no
)值没有意义
查看此方法会引发一个明显的问题,即返回值是否比分配给实例变量更好。这看起来像:
- (BOOL) compareSize:(Player *)player
{
return self.fSize > player.pSize;
}
if ([self compareSize:((MyAppDelegate *)[NSApp delegate]).player])
现在,您可以在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:
,例如[自比较:somePlayerInstance]
。因此,您现在必须问问自己,您希望在哪里找到播放器
;它可能是update
(例如-(void)update:(Player*)somePlayerInstance
)的一个参数,或者您可能有一个方法可以调用,该方法返回整个玩家集合,您需要对每个玩家进行测试,等等。我无法给出答案,因为我不知道您的游戏和算法
以下评论
您必须在应用程序中的某个位置存储对Player
对象的引用。如果只有一个播放器是player
设计为带有sharedInstance
或类似命名的类方法返回单个实例的单例播放器?如果是,则您的更新将包含:
if ([self compareSize:[Player sharedInstance]])
等等
另一种设计模式是让应用程序委托存储引用,并提供访问它的方法(或属性)。遵循此模式(并组成类MyDelegateApp
和属性player
名称),您的代码可能如下所示:
- (BOOL) compareSize:(Player *)player
{
return self.fSize > player.pSize;
}
if ([self compareSize:((MyAppDelegate *)[NSApp delegate]).player])
还有一个模型是在应用程序的主XIB/NIB文件中创建单个播放器-等等,有很多应用程序模型
你“简单”(当然不简单)需要设计你的应用程序模型,这样你的单个播放器就可以在你需要的地方以某种方式访问…不清楚你在问什么,但让我们看看你的代码,看看它是否有帮助
您的第一个方法可以更简洁地编写为:
- (void) compareSize:(Player *)player
{
isBigger = self.fSize > player.pSize;
}
使用if
/else
分配true
/false
(或YES
/no
)值没有意义
查看此方法会引发一个明显的问题,即返回值是否比分配给实例变量更好。这看起来像:
- (BOOL) compareSize:(Player *)player
{
return self.fSize > player.pSize;
}
if ([self compareSize:((MyAppDelegate *)[NSApp delegate]).player])
现在,您可以在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:
,例如[自比较:somePlayerInstance]
。因此,您现在必须问问自己,您希望在哪里找到播放器
;它可能是update
(例如-(void)update:(Player*)somePlayerInstance
)的一个参数,或者您可能有一个方法可以调用,该方法返回整个玩家集合,您需要对每个玩家进行测试,等等。我无法给出答案,因为我不知道您的游戏和算法
以下评论
您必须在应用程序中的某个位置存储对Player
对象的引用。如果只有一个播放器是player
设计为带有sharedInstance
或类似命名的类方法返回单个实例的单例播放器?如果是,则您的更新将包含:
if ([self compareSize:[Player sharedInstance]])
等等
另一种设计模式是让应用程序委托存储引用,并提供访问它的方法(或属性)。遵循此模式(并组成类MyDelegateApp
和属性player
名称),您的代码可能如下所示:
- (BOOL) compareSize:(Player *)player
{
return self.fSize > player.pSize;
}
if ([self compareSize:((MyAppDelegate *)[NSApp delegate]).player])
还有一个模型是在应用程序的主XIB/NIB文件中创建单个播放器-等等,有很多应用程序模型
你“简单”(当然不简单)需要设计你的应用程序模型,这样你的单个播放器就可以在你需要的地方以某种方式访问…只是一个建议:为什么不