2012-07-31 3 views
2

Cocos2D로 만든 앱이 여러 개 있습니다.Cocos2D 2.0은 1.0과 다른 동작을합니다.

일부는 Cocos2D의 새로운 릴리스 2.0으로 업그레이드 중입니다. 내가 사용하는 방법은 다음과 같습니다

  1. 나는 표준 템플릿에서 비어있는 새 프로젝트를 만들
  2. 나는 일반적으로 내 초기 레이어로 레이어 helloworld를 유지

새 프로젝트에 모든 파일을 이동 . Cocos2D가 처음으로 introLayer를 생성하고 이전 버전과 마찬가지로 Helloworld를로드하기 위해 동작을 되돌려 보았습니다. 그 말은, 나는 몇 가지를 발견했다 :

  1. Helloworld의 init 메소드 내부의 동작이 다른 점이있다. 나는 오리엔테이션이 init 메소드 내에서 부정확하게보고되었음을 알았다. 앱이 단지 풍경 일지라도 항상 세로로보고됩니다. 제가 주목 한 것은 그것이 감독이 완전히 초기화되지 않은 것과 같습니다. 감독의 견해를 사용하려고 시도하면이 사실이 확인되었습니다. 이 뷰는 Helloworld의 init 메소드 내에서 사용하려고하면 항상 유효하지 않은 것으로 나타납니다.

해결하기 위해 모든 코드를 Helloworld의 onEnter 메서드로 옮겼습니다. 이제 Helloworld와 감독이 모두 초기화되어 모든 것이 작동합니다.

이 방법은 Cocos2D 1.0을 2.0으로 업그레이드 한 첫 번째 응용 프로그램에서 작동했지만 현재 Cocos2D 2.0beta에서 2.0 최종으로 변환하는 응용 프로그램에는 문제가 있습니다.

지금이 문제는 helloworld를 어떤 터치를 트리거하지 않고 그래, 난이 곳이있다이다 :

2.0 감지 터치에서 helloworld를 방지 할 수있는 일
-(void) registerWithTouchDispatcher 
{ 
    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 
} 


- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 
    return YES; 
} 

? Helloworld의 init 메소드가 2.0 베타 또는 1.0에서와 같이 동작하도록하려면 어떻게해야합니까?

참고 : Helloworld가로드 될 때 ccTouchBegan 및 registerWithTouchDispatcher가 호출되지 않습니다.

감사합니다.

답변

0

이 질문에 대한 해결책은 [super onEnter]를 onEnter 메서드에 넣는 것입니다.

-(void) onEnter { 
    [super onEnter]; 
    self.isTouchEnabled = YES; 
} 

이 라인의 부족은 스케줄러 작동하지 않는, ccMove의 이상한 행동, ccTransition 트리거하지 onEnterTransitionDidFinish 문제의 모든 종류의 같은 응용 프로그램에 문제의 모든 종류를 작성했다.

3

회전 문제는 알려진 버그입니다. 첫 번째 장면은 앱이 가로 모드로 설정되어 있어도 세로 모드로 초기화됩니다. 그것은 App Delegate에 의해 오리엔테이션이 업데이트되기 전에 init이 발생하기 때문입니다. 코드를 onEnter에 넣어두면, 단순히 "인트로"장면을로드 한 다음 실제 첫 장면을로드하면 해당 장면도 수정됩니다.

접촉 문제는 아마도 cocos2d 2.0의 문제가 아닙니다. 아마도 self.isTouchEnabled = YES을 설정하지 않는 것만 큼 간단 할 것입니다. registerWithTouchDispatcher 메서드가 호출되지 않으면 isTouchEnabled가 YES로 설정되어 있지 않거나 CCLayer 클래스에서이 작업을 수행하지 않고 CCScene 일 수 있습니다.

+0

이제 이것을 onEnter에 놓아야합니다. [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate : self priority : 0 swallowsTouches : YES]; 어떤 이유로 registerWithTouchDispatcher가 Helloworld에서 자동으로 더 이상 호출되지 않습니다. 또 다른 점은 CCTargetedTouchDelegate를 인터페이스의 Delegate 선언 Helloworld에 두어야한다는 것입니다. 이렇게하면 ccTouchBegan이 트리거됩니다. 이제는 터치를 지원하는 모든 수업에서이 작업을 수행해야합니다 ... 버그입니까? – SpaceDog

+0

예, 저는 CClayer 클래스에서이 작업을 수행하고 있습니다. Helloworld는 기본 템플릿에 의해 생성됩니다. 지금 다른 많은 문제를 발견했으며, 2.0이 수정 될 때까지 2.0 베타 버전을 사용하고있을 것입니다. 어쨌든 감사합니다. – SpaceDog

관련 문제