2012-02-13 7 views
2

나는 배경이 CCSprite이고 cocos2d 프레임 워크에서 확장되었습니다. 그리고이 스프라이트를 gamelayer에 추가했습니다.cocos2d는 다른 스프라이트에 스프라이트를 추가 할 수 없습니다.

//create the stars 
stars = [[CCArray alloc] init]; 
for (int i = 0; i < 10; i++) 
{ 
    Star* star = [[Star alloc ] initWithFile:@"star-hd.png"]; 
    CGSize screensize = [[CCDirector sharedDirector] winSize]; 
    //CCLOG(@"screensize: %f, %f", screensize.width, screensize.height); 
    CGPoint newstarlocation; 
    newstarlocation.x = CCRANDOM_0_1() * screensize.width; 
    newstarlocation.y = CCRANDOM_0_1() * screensize.height; 
    star.position = newstarlocation; 
    [self addChild:star z:i]; 
    [stars addObject:star]; 
} 

을하지만 별이 표시되지 않습니다 : 이제 이러한 배경 클래스에 나는과 같이 다른 CCSprites라는 스타를 추가하려고합니다. 여러 가지 시도를 해봤지만 작동하는 유일한 방법은 배경 대신에 gamelayer에 별을 추가하는 것입니다. 그러나 그것은 내가 원하는 것이 아닙니다.

sprite를 cocos2d에서 중첩 할 수 있습니까? 허용되는 경우 스프라이트를 어떻게 중첩시킬 수 있습니까?

+0

코드가 올 것 같다, 다른 이미지 (star.png)와 고정 된 위치를 사용해보십시오 (별의 위치가 부모 (배경 스프라이트)의 위치에 * 상대적 * (예 : 오프셋)입니다. 마지막으로, 무엇이다 자신의 배열에 별을 추가 할 때의 요점은 별을 추가 할 위치의 children 배열을 사용할 수 있습니다. 필요한 경우 다른 노드를 구별하기 위해 동일한 태그를 모두 제공하십시오. – LearnCocos2D

답변

-1

왜 스프라이트를 중첩시키고 싶은지 모르겠지만, 그뿐만 아니라 매우 효율적입니다. 스프라이트와 자식 스프라이트를 포함하는 Star 클래스를 작성한다.

cocos2d가 CCNode을 좋아하기 때문에이 작업을 수행 할 수 있습니다. 거의 모든 것이 파생됩니다. 그렇다고해서 CCSprite이 아이들을 그리는 것을 처리하는 것은 아닙니다. CCLayerCCSpriteCCNodes을 추가 할 수 있습니다. 그것은 그들의 핸들러가 다른 것입니다.

또한 좀 더 효율적이기 때문에, 스프라이트를 게임 레이어에 직접 그리는 것보다 훨씬 효율적입니다.

1

스프라이트를 중첩 할 수는 없지만 레이어를 중첩 할 수는 있습니다.

배경 레이어를 대신 생성하고 배경 스프라이트와 스타 스프라이트를 추가 한 다음 배경에 gamelayer 앞에 배경 레이어를 추가하십시오. 그런 식으로 당신은 gamelayer와 떨어져있는 배경을 유지하고, 원하는만큼의 스프라이트로 다른 모든 것의 뒤에 있습니다. (C++에서)

게으른 예 :

CCLayer *backgroundLayer = CCLayer::create(); 
CCSprite *skySprite = CCSprite::createWithSpriteFrameName("sky_sprite.png"); 
CCSprite *starsSprite = CCSprite::createWithSpriteFrameName("stars_sprite.png"); 

backgroundLayer->addChild(skySprite); 
backgroundLayer->addChild(starsSprite); 

CCLayer *gameLayer = CCLayer::create(); 

scene->addChild(backgroundLayer); 
scene->addChild(gameLayer);  
1

그냥 더 (그런데 거기 밖으로 최고의 혀 책 중 하나가) 스테 펜의 관점을 명확히한다. 별들은 아마도 "star-hd.png"라고 표시되지 않을 것입니다. 오히려 "star.png"를 참조해야합니다. Cocos2d는 '-hd'와 '-ipad'라는 접미사를 이미지에 자동으로 찾아서 어떤 이미지가 어떤 장치와 연결되어야하는지 확인합니다. 이 코드를 찾을 수있는 AppDelegate.m 파일을 보면 프로그램이 찾을 접미사를 변경할 수 있습니다.

suffixes are going to be used 
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];  // Default on iPhone RetinaDisplay is "-hd" 
[sharedFileUtils setiPadSuffix:@"-hd"];     // Default on iPad is "ipad" 
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; // Default on iPad RetinaDisplay is "-ipadhd" 
관련 문제