2009-12-12 2 views
5

레이어에 일련의 스프라이트를 배치하려하지만 모든 스프라이트를 그룹으로 이동하려고하므로 CocosNode를 만들어 동일한 레이어로 설정합니다. 크기를 화면으로 가져 와서 화면 중앙에 배치 한 다음 레이어에 추가하는 대신 해당 노드 (lightNode)에 스프라이트를 추가하십시오.Cocos2d - 부모 노드의 여러 스프라이트가 레이어가 아닌

내가보고있는 것은 lightNode가 아닌 레이어에 배치 할 때와 비교하여 스프라이트가 올바른 (동일한?) 위치에 나타나지 않는다는 것입니다.

XCode Cocos2d 응용 프로그램 템플릿 "Hello World"를 사용하여 문제를 표시하는 테스트 프로그램을 작성한 다음 HelloWorldScene.m의 HelloWorld 클래스의 -init() 메소드를이 코드로 바꿨습니다.

-(id) init 
{ 
    if((self=[super init])) 
    { 
     // create my parent node that will contain all the related sprites 
     lightPane = [[CocosNode alloc] init]; 
     CGSize paneSize = { 480, 320 }; 
     [lightPane setContentSize:paneSize]; 
     [lightPane setPosition:ccp(240, 160)]; 

     // add pane to layer  
     [self addChild:lightPane z:0]; 

     // add a series of sprites to demonstrate the problem 
     int y = 40; 
     int x; 
     for (x=30; x<300; x+=20) 
     { 
      Sprite *sp = [Sprite spriteWithFile:@"pause.png"]; 
      [sp setPosition:ccp(x, y)]; 

      NSLog(@"Next sprite at position (%d, %d)", x, y); 

      [lightPane addChild:sp z:1]; 
      //[self addChild:sp z:1]; 
      x+= 20; 
     } 
    } 
    return self; 
} 

이 코드는 "pause.png"라는 PNG 파일을 참조 - 단지 크기가 30x30 픽셀에 대한 작은 이미지를 촬영하고 실행하기 위해이 프로젝트에 넣습니다.

스프라이트가 중간에서 시작하여 오른쪽으로 향하는 화면 중간에 나타납니다.

lightPane에 스프라이트를 추가하는 행을 주석 처리하고 그 아래에있는 행의 주석을 제거한 다음 샘플을 다시 실행하면 필요한 좌표에 스프라이트가 올바르게 표시됩니다.

이것은 분명히 스프라이트의 부모로 사용하고있는 CocosNode와 관련이 있습니다. 아무도 내가 여기서 뭘 잘못하고 있는지 보지 않니?

+0

잘 형성된 질문, 좋은 코드 샘플! +1 – nash

답변

3

lightPane의 위치를 ​​0,0으로 설정하려고합니다. 위치는 기본적으로 중앙에 있지 않으며 왼쪽 하단에 있습니다.

+0

Doh! 어떤 이유로 저는 CocosNode가 스프라이트처럼 동작 할 것으로 예상했습니다. 스프라이트는 앵커가 중앙에 놓여 있다고 믿습니다. 어느 쪽이든, 당신 말이 맞아요, 센터에서 0,0 위치에 있어야합니다. 감사! –

+1

또는 lightPane 노드를 앵커 0.5,0.5로 설정합니다. 나는 이것을 일찍 시도했지만 작동하지 않는다고 맹세 할 수 있었다. 하지만, 내가 한 일은 앵커가 240,160으로 설정되었고 .5, .5가 아니라고 생각합니다. 앵커가 절대 크기가 아니라 내용의 크기에 비례한다는 것을 알 수 있습니다. 따라서 .5, .5는 높이의 절반을 의미합니다. 폭의 절반. –

+0

스프라이트에는 중심 앵커 위치가있어서 액션이 예상대로 작동한다고 생각합니다. 예 : 스프라이트를 회전시키고 왼쪽 아래에서 회전시키는 것을 상상해보십시오. –

0

스프라이트 아틀라스로 이동하면 작동하지 않습니다. 새로운 버전의 Cocos2d (베타 버전 1.9)로 이동하지 않는 한. 1.9 버전에서는 아틀라스 스프라이트의 복잡한 양육을 할 수 있습니다.