Как я могу получить соответствующее имя текстуры из GLuint?
РЕДАКТИРОВАТЬ 5: Настройки сборки уровня оптимизации:
РЕДАКТИРОВАТЬ 4: Я попытался изменить конфигурацию сборки, поместив все в "Отладка", а затем запустить для "тестирования". Как ни странно, он не падал примерно 20 раз (я продолжал загружать и выгружать различные GameScenes с различными ресурсами). В 21-й раз (даже если это не было статистически значимо) я собирался подумать, что он может больше не падать, а падать. Сводка по-прежнему недоступна, поэтому мне интересно, правильно ли я это делаю или есть какая-то другая проблема. Вот конфигурация сборки и отчет о сбое:
РЕДАКТИРОВАТЬ 3: Важно, что эта ошибка возникает только несколько раз, например, 1 из 6/7, поэтому мне трудно ее изолировать.
У меня возникли серьезные проблемы с пониманием того, какая текстура вызывает сбой этого NSAssert. Я перепробовал несколько подходов, но ни один из них не сработал (или, скорее всего, я просто слишком глуп).
В отладчике я вижу информацию о GLuint. Читая в Интернете, я обнаружил, что это способ ссылки на фрейм (своего рода указатель).
Я подумал, что должен быть способ извлечь имя фрейма из plist-файла batchNode, и мне было интересно, может ли этот номер GLuint как-то соответствовать порядку фрейма в plist-файле.
NSAssert( !batchNode_ || texture.name == batchNode_.texture.name , @"CCSprite: Batched sprites should use the same texture as the batchnode");
/** texture name */
@property(nonatomic,readonly) GLuint name;
Я попробовал эти подходы, но они ловят все случаи:
//From CCSprite.m
-(void) setTexture:(CCTexture2D*)texture
{
if(!batchNode_ || texture.name != batchNode_.texture.name)
{
CCLOG(@""); // I added a debug here but it catches all cases..
NSAssert( !batchNode_ || texture.name == batchNode_.texture.name , @"CCSprite: Batched sprites should use the same texture as the batchnode");
}
РЕДАКТИРОВАТЬ: Я знаю, что это немного сумасшествие, но я вставляю мою попытку инициализировать fileName в CCTexture2D, так как я не могу правильно его инициализировать:
- (id) initWithString:(NSString*)string dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)hAlignment vAlignment:(CCVerticalTextAlignment) vAlignment lineBreakMode:(CCLineBreakMode)lineBreakMode font:(UIFont*)uifont
{
NSAssert( uifont, @"Invalid font");
fileName=string;//TODO: Remove
.....
}
Тот, что выше, является единственным initWithString, который мне удалось изменить. Я не могу изменить свойство fileName в этом другом:
#elif defined(__CC_PLATFORM_MAC)
- (id) initWithString:(NSString*)string dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)hAlignment vAlignment:(CCVerticalTextAlignment)vAlignment attributedString:(NSAttributedString*)stringWithAttributes
РЕДАКТИРОВАТЬ 2: Я пытался назначить имя файла как:
fileName = [string copy];
но это все еще дает мне резюме недоступно, как сообщается здесь:
похоже, что проблема возникает в setTexture во время обновления анимации, но fileName кажется изначально неправильным.
Вот как я объявил свойство в CCTexture2D:
@property(nonatomic, copy) NSString* fileName; //TODO Remove