Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在Objective-C中调用引用其他类文件的方法_Iphone_Objective C_Cocos2d Iphone - Fatal编程技术网

Iphone 在Objective-C中调用引用其他类文件的方法

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

我试图调用一种方法来检查玩家是比敌人大还是比敌人小。(这是一种鱼类游戏)

在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应用所有加载规则

不确定设置此方法的最佳方式是什么,以及调用它的最佳方式,因为[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文件中创建单个播放器-等等,有很多应用程序模型


你“简单”(当然不简单)需要设计你的应用程序模型,这样你的单个播放器就可以在你需要的地方以某种方式访问…

只是一个建议:为什么不