我第一次尝试创建一个具有多个参数的方法。我还在琢磨Objective C是怎么做的。这事我已经想了好几天了。终于准备好寻求帮助了。在这里搜索并尝试了许多关于堆栈溢出的帖子。下面是我正在使用的各种代码块……这是一个cocos2d v3项目,仅供参考。
// 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
错误:没有可见的@interface为'MainPlayScene'声明选择器'evaluateTileAttack:'
不知道为什么我得到这个错误,因为我认为我在MainPlayScene.h声明正确…
方法声明,虽然技术上有效,我认为,至少是不寻常的ObjC。当您在冒号上换行并对齐时(对于长方法调用/声明是习惯的):
- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode
:(CCNode*)tileTouchedCCNode2;
通常一个方法的所有参数都有一个名称:
- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode
otherNode:(CCNode*)tileTouchedCCNode2;
调用肯定是无效的,ObjC方法不接受以逗号分隔的参数列表(除非特别声明这样做,这很少见)。所以这是非法的:
[self evaluateTileAttack: tileTouchedCCNode, tileTouchedCCNode2];
相反,它应该是(但不确定这个未命名的格式):
[self evaluateTileAttack:tileTouchedCCNode
:tileTouchedCCNode2];
这绝对有效,并且是预期/推荐的方法:
[self evaluateTileAttack:tileTouchedCCNode
otherNode:tileTouchedCCNode2];