Objective c 方法问题中的多参数

Objective c 方法问题中的多参数,objective-c,methods,cocos2d-iphone,multiparameter,Objective C,Methods,Cocos2d Iphone,Multiparameter,我第一次尝试创建一个具有多个参数的方法。我还在想C是怎么做的。这件事让我头痛了好几天了。终于准备好求助了。在这里搜索并尝试了许多关于堆栈溢出的帖子。下面是我正在使用的各种代码块。。。这是一个COCOS2DV3项目供参考 // MainPlayScene.h #import <Foundation/Foundation.h> #import "cocos2d.h" #include <sys/sysctl.h> @interface MainPlayScene : CCS

我第一次尝试创建一个具有多个参数的方法。我还在想C是怎么做的。这件事让我头痛了好几天了。终于准备好求助了。在这里搜索并尝试了许多关于堆栈溢出的帖子。下面是我正在使用的各种代码块。。。这是一个COCOS2DV3项目供参考

// MainPlayScene.h
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#include <sys/sysctl.h>

@interface MainPlayScene : CCScene <CCPhysicsCollisionDelegate>
 + (MainPlayScene *)scene;
 - (id)init;
 - (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode : (CCNode*)tileTouchedCCNode2;
@end


// MainPlayScene.m
#import "cocos2d.h"
#import "MainPlayScene.h"

@implementation MainPlayScene
{
 CCNode *tileTouchedCCNode;
 CCNode *tileTouchedCCNode2;
}

+ (instancetype)scene
{
 return [[self alloc] init];
}

- (id)init
{
 return self;
}

- (void)evaluateTileAttack: (CCNode*)ccnode1 : (CCNode*)ccnode2
{
 NSLog(@"ccnode1: %@", ccnode1.physicsBody.collisionType);
 NSLog(@"ccnode2: %@", ccnode2.physicsBody.collisionType);
}

- (void)actionMenuAttackHandler: (id)sender
{
 [self evaluateTileAttack: tileTouchedCCNode, tileTouchedCCNode2];
  ^^^^^^^^^^^^^^^^^^^^^
  error at this line
}

@end
//mainplaysecene.h
#进口
#导入“cocos2d.h”
#包括
@界面主播放场景:CCScene
+(主要场景*)场景;
-(id)init;
-(void)evaluateTileAttack:(CCNode*)tileTouchedCCNode:(CCNode*)tileTouchedCCNode2;
@结束
//主场景
#导入“cocos2d.h”
#导入“mainplaysecene.h”
@游戏场景的实现
{
CCNode*TileTouchedCnode;
CCNode*TileTouchedCnode2;
}
+(instancetype)场景
{
返回[[self alloc]init];
}
-(id)init
{
回归自我;
}
-(void)evaluateTileAttack:(CCNode*)ccnode1:(CCNode*)ccnode2
{
NSLog(@“ccnode1:%@”,ccnode1.physicsBody.collisionType);
NSLog(@“ccnode2:%@”,ccnode2.physicsBody.collisionType);
}
-(无效)actionMenuAttackHandler:(id)发件人
{
[自我评估文件攻击:TileTouchedCnode,TileTouchedCnode2];
^^^^^^^^^^^^^^^^^^^^^
这一行有错误
}
@结束
错误:“MainPlaySecene”没有可见的@interface声明选择器“evaluateTileAttack:”


我不知道为什么会出现这个错误,因为我想我是在MainPlaySecene.h中声明的

虽然我认为方法声明在技术上是有效的,但至少对ObjC来说是不寻常的。最好在冒号上进行换行和对齐(这是长方法调用/声明的惯常做法)时看到:

- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode 
                          :(CCNode*)tileTouchedCCNode2;
通常,一个方法对所有参数都有一个名称:

- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode 
                 otherNode:(CCNode*)tileTouchedCCNode2;
调用肯定是无效的,ObjC方法不采用逗号分隔的参数列表(除非特别声明这样做,这是罕见的)。所以这是非法的:

[self evaluateTileAttack: tileTouchedCCNode, tileTouchedCCNode2];
相反,它应该是(但不确定这种未命名的格式):

这肯定有效,并且是预期/推荐的方法:

[self evaluateTileAttack:tileTouchedCCNode 
               otherNode:tileTouchedCCNode2];

这看起来不像是一个正确的Objective-C方法声明,调用肯定是错误的。您似乎正在列出参数C-style..感谢您的澄清!现在效果很好。我还是不能投票。我的代表太低了。为什么我的代表没有上升?你现在有6个代表;)谢谢你的支持!然而,现在我被禁止在这里提问。我真的不认为这些问题是不合理的。如果是,有人能解释一下原因吗?我已经阅读了说明,但有时我无法发布我尝试过的代码,因为我尝试的不起作用。我的一篇帖子只是问(因为已经有一段时间没有人问过了)是否有可能获得另一个游戏排行榜的详细信息。我不认为你的帐户被禁止,但个别问题可能被版主搁置或删除,这取决于离题、质量等
[self evaluateTileAttack:tileTouchedCCNode 
               otherNode:tileTouchedCCNode2];