2012-03-15 1 views
0

작은 게임을 만드는 중입니다. 주요 게임 플레이 레이어가 여러 매개 변수를 기준으로 확대 및 축소됩니다. .scale 특성을 1로 설정하면됩니다. 잘 작동합니다.Cocos2d CCLayer.scale

그러나 어떤 자식 노드에서 [[CCDirector sharedDirector] winSize];을 호출 할 때 크기가 조정 된 창 크기를 얻는 데는 문제가 있습니다.이 문제를 해결하기 위해 모든 오프 스크린 검사를 규모 분수 플러스 하나?

여기에 예를 들어

나는 CCLayer를 만들고 여기에 스프라이트를 배치하고있다. 모든 스프라이트는 그때 스프라이트가 화면 밖으로인지 주위에 이동 검사가 기본적으로

static CGRect screenRect; //stored as a static variable for performance reasons 
... 
-(id)init{ 
    ... 
    // make sure to initialize the screen rect only once 
    if (CGRectIsEmpty(screenRect)){ 
     CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
     screenRect = CGRectMake(0, 0, screenSize.width, screenSize.height); 

     CCLOG(@"Screen Size during init: %f, %f", screenSize.width, screenSize.height); 
    } 
} 

, 초기화하는 동안 화면 크기와 정적 변수가 있고, 그렇다면, 나는 자동으로 가져가 반대쪽 :

if(newPosition.x > screenRect.size.width){ 
    newPosition.x = 0; 
}else if(newPosition.x < 0){ 
    newPosition.x = screenRect.size.width; 
} 

if(newPosition.y > screenRect.size.height){ 
    newPosition.y = 0; 
}else if(newPosition.y < 0){ 
    newPosition.y = screenRect.size.height; 
} 

모든 것이 잘 작동하고 예상대로입니다. 그러나 부모 CCLayer의 scale 속성을 변경하면 오프 스크린 위치 지정이 레이어와 함께 "저울"이되어 다소 이상합니다. 따라서 CCLayer.scale = 0.5f;을 설정하면 오프 스크린 경계가 전화기 화면의 "내부"로 이동 한 것처럼 보입니다. 나는 이것을 피하고 싶다. 방법?

+0

안녕을해야합니다. 나는 그것을 검사했다. 나를 위해 그것의 일 벌금. 내 레이어 크기를 조정하고 winSize를 확인했습니다. 그것의 올바른 가치를 제공합니다. 자식 노드에서 호출하는 방법을 이해할 수 없습니까? 그 모든 곳의 동일한 코드. –

+0

안녕하세요, 감사합니다. 방금 코드 예제를 추가했습니다! – clops

답변

0

꽤 많은 개발자들에게 이야기 한 후, 오프 경계 검사, 계정으로 확장 즉

newPosition.x > screenRect.size.width/CCLayer.scale