2014-04-10 1 views
0

최근에 cocos2d v3.0을 탐색하기 시작했습니다. 나는 기본적인 것들을 시도하고 있지만 약간의 문제가 있습니다.는 CCNode에서 터치를 감지 할 수 없습니다. - cocos2d v3.0

기본적으로 Square 개체를 만들기 위해 CCSprite를 서브 클래 싱합니다. 그 후 HelloworldScene에 정사각형 객체를 추가하면 내 Square Sprite에서 접촉을 원합니다. 어떤 이유로 그것은 작동하지 않습니다.

다음은 코드 --header 파일

#import "CCSprite.h" 
@interface Square : CCSprite 
@end 

implementaion file 

#import "Square.h" 
#import "cocos2d.h" 
@implementation Square 
-(id)init { 
    // Apple recommend assigning self with supers return value 
    self = [super init]; 
    if (!self) return (nil); 
    self.contentSize = [[CCDirector sharedDirector] viewSize]; 
    self.userInteractionEnabled = YES; 
    return self; 
} 
-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CCLOG(@"touch received"); 
} 
@end 

그리고 여기에 안녕하세요 세계 init 방법이다

- (id)init 
{ 
    // Apple recommend assigning self with supers return value 
    self = [super init]; 
    if (!self) return(nil); 

    Square *_square = [[Square alloc] initWithImageNamed:@"background.png"]; 
    [_square setPosition:CGPointZero]; 
    [self addChild:_square]; 
    // done 
return self; 
} 

내가 코드를 실행할 때 화면에 스프라이트를 볼 수 있지만 내가 누를 때 그것에 아무것도 터치가 시작된 적이 발생하지 않습니다. 내가 여기서 무엇을 놓치고 있니?

답변

2

문제는 CCSprite 하위 클래스의 지정된 이니셜 라이저를 무시하지 않는 것입니다. initWithImageNamed:으로 스프라이트를 초기화하면 구현중인 init 메소드가 호출되지 않고 터치 처리가 활성화되지 않습니다. 재정의 할 것이다 지정 초기화는 다음과 같습니다 하나가 CCSprite가 초기화 될 때마다 호출 보장되는 유일한 init 방법입니다

- (id)initWithTexture:(CCTexture *)texture rect:(CGRect)rect rotated:(BOOL)rotated; 

있다.

- (void)onEnter { 
    [super onEnter]; 

    self.userInteractionEnabled = TRUE; 
} 

당신은적인 Cocos2D 3.0에서 처리 터치에서 전체 자습서를 찾을 수 있습니다

어느 쪽이든, 나는 터치 스프라이트의 장면에 표시 될 때 호출되는 onEnter 방법에서의 처리 전환 제안 here.

+0

감사합니다. 다른 클래스의 지정된 초기화 프로그램과 같이이 정보에 대해 더 자세히 알 수있는 곳은 어디입니까? - (id) initWithTexture : (CCTexture *) 텍스처 rect : (CGRect) rect rotate : (BOOL) rotate; CCSprite에 대해 유일하게 지정된 이니셜 라이저? – lionserdar

+0

@lionserdar : 이것은 cocos2d 버전 0.9에서 2.1.x까지는 사실이지만이 경고가 3.0에도 계속 적용되는지는 알 수 없습니다. : 코코스를 덮어 씌울 때 [super onSomething]을 잊지 마라. 뭔가 방법 ... – YvesLeBorg

+0

흠, 알 겠어. 네, [super onEnter]에 전화 했어요. 고마워 .. – lionserdar

관련 문제