문제

하려고 해요 최고의 방법을 통과하는 수준의 매개 변수를 사용하여 장면 Spritebuilder 및 Cocos2D Xcode 에서.

내가 사용하여 표준 아래에 코드 사이의 전환을 장면이 있습니다.

[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];

어떤 도움을 많이 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

Gameplay.ccbGameplayClass 로 지정된 사용자 지정 클래스고,해당 클래스라는 속성 currentLevel, 할 수 있 인스턴스에 액세스 할당은 수준의는 다음과 같다:

CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
game.currentLevel = 3;

[[CCDirector sharedDirector] replaceScene:theScene];

참고는여 시간 currentLevel 는 할당 GameplayClass 이미 실행 initdidLoadFromCCB 방법 이후 발생하는 중 loadAsScene.더 필요한 경우 init 처리를 재정의 onEnterGameplayClass:

-(void) onEnter
{
    [super onEnter]; // must call super

    switch (self.currentLevel)
    {
        // other switches omitted...

        case 3:
            // your level 3 code here
            break;
    }
}

다른 팁

COCOS2D 2.0 + COCOSBuilder로 만든 게임에서 게임 플레이 요소를 관리하는 CLASS GAMEOBJECTLAYER 클래스 메소드 loadWithLevelID:levelID를 추가했습니다.

@implementation GameObjectLayer {
    G1LevelID * _levelID;
}
// load a Luminetic Land game object layer
+ (instancetype)loadWithLevelID:(G1LevelID*)levelID {
    NSString * levelFileName = ... builds levelFileName from levelID;
    GameObjectLayer * gol = (GameObjectLayer*) [CCBReader nodeGraphFromFile:levelFileName];
    [gol setLevelID:levelID];
    return gol;
}
- (void)setLevelID:(G1LevelID*)levelID {
    _levelID = levelID;
}
.

이제 gameObjectlayer를 입력 할 수 있습니다

GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];
.

일반적으로 CCBI 파일을 매핑하는 클래스에 "로드"메소드를 추가하는 이점을 제공합니다.

  1. 클래스 만 관련 CCBI 파일의 이름을 알고 있습니다.
  2. 주어진 클래스를 만드는 CCBI 파일은 전체 프로젝트에서 한 번만 참조됩니다.
  3. 객체를 설정하는 모든 논리 (예를 들어, g1gameObjectlayer 유형)는 객체 자체 안에 있습니다.
  4. CCSCENE 서브 클래스와 비슷한 접근 방식을 따를 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top