2015-08-22 3 views
0

В настоящее время я исправляю старый проект iPhone Xcode для Cocos для нового двигателя V 3.4. Его используют, чтобы работать абсолютно нормально, однако я нашел эту строку кода:textureImageData в plist? - Cocos 2D V 3.4 (CCParticleSystem)

CCParticleSystem *fire = [CCParticleSystemQuad particleWithFile:@"fire.plist"]; 

CCParticleSystemQuad с тех пор был удален поэтому я заменил его «CCParticleSystem»:

CCParticleSystem *fire = [CCParticleSystem particleWithFile:@"fire.plist"]; 

Это терпело крах на этой линии код с этих сообщений об ошибке:

- cocos2d: Couldn't find file:user_particle30956.png 
- *** Assertion failure in -[CCTextureCache addCGImage:forKey:], /Users/.../Source/libs/cocos2d-iphone/cocos2d/CCTextureCache.m:370 
- *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 

изображение не существовало и фактически встраивается в файл Plist как данные изображения текстуры. Я знаю, что в Cocos V 2 он автоматически создаст и сохранит данные этого изображения в виде файла изображения с именем. Как я могу сделать эту работу для V 3?

Я не уверен, сколько информации вам нужно о файле plist. Это информация, которую следует длинный список системных частиц конфигураций (угол, продолжительность, тип эмиттера и т.д.):

<key>textureFileName</key> 
<string>user_particle30956.png</string> 
<key>textureImageData</key> 
<string>eJztnQecXWURxXdDgCCggBQLuisqKlbslcSCBcEC9pa1996wkbUr9q5...</string> 

Спасибо всем.

ответ

0

У меня была та же проблема. С particle designer docs встроенная текстура, по-видимому, является TIFF, а не PNG, что и ожидается Cocos2D.

Я не понимаю этого, потому что он отлично работал с Cocos2D v2.2.

С v3.4.x, что я сделал, был изменен проект дизайнера частиц, чтобы экспортировать текстуру в файл, а затем добавил этот файл в проект Xcode, чтобы система частиц загрузила его с трудом.

Возможно, вы сможете посмотреть код v2.2, чтобы узнать, что он сделал. Возможно, этот код можно довести до версии v3.4.x

[Обновлено] Просмотрев код v2.2, механизм для взятия двоичных данных из встроенного изображения и преобразования его в текстуру использует UIImage, а не некоторые PNG/JPEG.

// Cocos2d v2.2 
// 
#ifdef __CC_PLATFORM_IOS 
      UIImage *image = [[UIImage alloc] initWithData:data]; 
#elif defined(__CC_PLATFORM_MAC) 
      NSBitmapImageRep *image = [[NSBitmapImageRep alloc] initWithData:data]; 
#endif 

Код v3.x делает это (для IOS и Android):

// Cocos2D v3.x 
// 
BOOL png = [[[dictionary valueForKey:@"textureFileName"] lowercaseString] hasSuffix:@".png"]; 
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); 
CGImageRef image = (png) ? CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault) : CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault) ; 

Я сильно подозреваю, что следующий может работать (хотя я не проверял это еще сам):

Я попытался разрешить для Android здесь, но я не вижу, как он будет работать, если встроенная текстура действительно является TIFF, а библиотека моста Android также ожидает PNG/JPEG.