2014-06-14 3 views
2

여러 매개 변수가있는 메서드를 처음 만들었습니다. 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 

오류 :

하지 내가 제대로 MainPlayScene.h에 선언하고 생각하기 때문에 나는이 오류가 발생하고 확실한 이유가 ... 'evaluateTileAttack' 'MainPlayScene'에 대한 눈에 띄는 @interface 셀렉터를 선언하지

+0

:이 확실히 작동하고 예상/권장되는 방법입니다

[self evaluateTileAttack:tileTouchedCCNode :tileTouchedCCNode2]; 

그것은 적절한 Objective-C 메소드 선언처럼 보이지 않으며, 호출은 틀리게 틀립니다. 매개 변수 C 스타일을 나열하는 것처럼 보입니다. – dandan78

+1

[이것을 읽으십시오] (http://rypress.com/tutorials/objective-c/methods.html). –

답변

3

기술적으로 유효하다고 생각되지만, 적어도 ObjC에서는 메서드 선언이 이상하다고 생각합니다.

- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode 
       otherNode:(CCNode*)tileTouchedCCNode2; 

통화가 확실히 :

- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode 
          :(CCNode*)tileTouchedCCNode2; 

가 일반적으로하는 방법은 모든 매개 변수의 이름을 가지고 : 최고의 당신이 포장과 결장에 (긴 메소드 호출/선언에 대한 관례로) 정렬 할 때 볼 유효하지 않은 ObjC 메서드는 쉼표로 구분 된 매개 변수 목록을 사용하지 않습니다. 따라서이 불법 :

[self evaluateTileAttack: tileTouchedCCNode, tileTouchedCCNode2]; 

대신은 (비록이 익명의 형식에 대해 확실하지)해야한다 :

[self evaluateTileAttack:tileTouchedCCNode 
       otherNode:tileTouchedCCNode2]; 
+1

설명해 주셔서 감사합니다. 그것은 위대한 지금 작동합니다. 나는 아직도 투표 할 수 없다. 내 대리인이 너무 낮아. 내 대리인이 왜 올라가지 않는거야? –

+0

담당자가 주석과 답변에 대한 upvotes 수신하여 올라간다. 내가 시험해 볼게. – LearnCocos2D

+0

당신은 지금 6 명의 대표자가있다) – LearnCocos2D

관련 문제