2012-07-23 2 views
0

나는 게임 씬 (GameScene) 클래스를 가지고 있는데,이 클래스의 초기화 중에 씬을 만들고 레이어를 아이에게 붙인다. 이상한 코드를 발견했습니다 :cocos2d에서 CCLayer를 이상하게 선언 한 이유는 무엇입니까?

CCScene *scene = [CCScene node]; 
    CCLayer *layer = [GameScene node]; 
    [scene addChild:layer]; 

왜 이렇게하지 않습니까?

CCLayer *layer = [CCLayer node]; 

이것은 가독성을 높이지 않습니까? 또한 alloc init을 전혀 사용하지 않는 이유는 무엇입니까?

답변

2
[CCNode node]; 

은 정적 (클래스) 메소드입니다. 자동으로 호출합니다. [[[self alloc] init] autorelease];

이 정적 초기화 프로그램을 사용하여 CCNode 하위 클래스를 초기화 할 수 있습니다. 기본적으로는 편의를 위해 필요하지 않습니다. (비록 내가 말했듯이, 그것은 가지고있는 것이 좋다).

클래스 메서드는 "+"기호를 사용하고 인스턴스 메서드는 "-"기호를 사용합니다. 클래스 메소드는 Java의 정적 메소드와 유사합니다. 해당 클래스의 인스턴스를 만들지 않고 호출 할 수 있습니다. 다음과 같이 보일 수 있습니다. [YourClass doSomething]; //Doesn't need an instance of YourClass

인스턴스 메소드는 실행할 수 있도록 해당 클래스의 인스턴스가 필요합니다. 내가 못 봤어

YourClass *yClass = [[YourClass alloc] init]; 
[yClass doSomethingElse]; //Needs an instance of YourClass 

,하지만 난 node 방법을 이런 식으로 뭔가 보이는 가정 :처럼이 보일 것이다 이상한 선언은 단지 현장을 반환

+ (CCNode*)node { 
    return [[[self alloc] init] autorelease]; 
} 

(static 초기화로 초기화를) 하위 레이어 인 사용자 지정 레이어를 사용하여 CCDirector에서 사용하고 표시 할 수 있습니다.

EDIT : 선명도를 더하게 될 것이라고 생각합니다.

이상한 선언은 장면을 반환하는 정적 초기화 프로그램 + (CCScene*)scene입니다.

관련 문제