2012-04-28 7 views
0

내 게임의 레벨 편집기를 만드는 중입니다. 나는 게임을 만들기 위해 cocos2d를 사용했다. CCNode의 하위 클래스이고 게임의 모든 레벨 개체를 포함하는 수준 노드가 있습니다. 그런 다음 레벨이 CCLayer에 추가됩니다. 레벨 (NSMutableArray)의 모든 자식을 resources 폴더의 파일에 저장하려고합니다. 이 NSMutableArray를로드하고 루프를 통과하여 저장된 모든 레벨 오브젝트를 레벨에 추가하려고합니다. 최종 게임의 레벨은이 파일을 기반으로하고 다른 장치는 다른 모든 게임 리소스와 함께 준비해야하기 때문에 로컬 장치에 이러한 레벨 개체를 저장할 수 없습니다. 이 작업을 수행 할 수있는 방법이 있습니까? 아니면 레벨 개체의 모든 속성을 포함하는 문자열을 저장하고 수준을로드하는 데 필요한 정보를 검색해야합니까? 그렇다면 NSString과 함께 파일에 C 구조체를 읽고 쓰는 방법이 있습니까? 당신은 (당신이 "자원"폴더 무슨 뜻인지 판단) 응용 프로그램 번들의 데이터를 저장할 수 없습니다리소스 파일에서 개체 쓰기 및 읽기 IOS

 NSString * filePath = @"LevelSaves.txt"; 
     NSString * fileRoot = [[NSBundle mainBundle]pathForResource:filePath  ofType:@"txt"]; 
     NSString * fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil]; 
     NSArray * allLinedStrings = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
     ObjectFactory * objFactory = ObjectFactory::sharedObjectFactory(); 
     for (NSString * curString in allLinedStrings) { 
      NSArray * seperatedString = [curString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@";"]]; 
      NSString * objectID = (NSString*)[seperatedString objectAtIndex:0]; 
      NSArray * properties = (NSArray*)[seperatedString objectAtIndex:1]; //not really sure about this part. Haven't tried saving anything there yet. 
      objFactory->createObject(objectID,properties); 

답변

0

: 여기에 지금까지 가지고있는 것입니다. 앱의 NSDocumentDirectory에 개체를 저장할 수 있으며 개체가 NSCoding과 일치하면 NSKeyedArchiver을 사용하여 개체를 serialize 할 수 있습니다.

위의 작업을 디버그하고 레벨 편집을 완료하면 릴리스 용으로 번들로 제공하고 NSKeyedUnarchiver을 사용하여 역 직렬화합니다.

+0

덕분에 내 업무가 훨씬 수월해졌습니다. 하지만 NSDocumentDirectory에 문서를 묶어서 배포하려면 어떻게해야합니까? –

+0

출시를 위해 앱 번들에 추가하려고합니다. 사용자가 레벨을 편집 할 수있게하려면 전체 노드를 문서 디렉토리에 쓸 수 있습니다. – Morrowless