Как я могу получить соответствующее имя текстуры из 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

0 ответов

Другие вопросы по тегам