Инициализатор CCSprite вызывает сбой без исключения или ошибки - PullRequest
0 голосов
/ 31 июля 2010

Я создаю собственный класс CCSprite для отображения пользовательского изображения и установки его собственной позиции, а также для выполнения других задач рисования.В настоящее время у меня нет другого кода, работающего в пользовательском классе, кроме инициализатора, который должен установить файл изображения и положение спрайта.Вот мой - (id)init метод

- (id)init 
{
    if (!(self = [super initWithFile:@"runnerImage.png"]))
        return nil;
    //set our texture to the runner image ^^^
    //set our initial position
    CGSize size = [[CCDirector sharedDirector] winSize];
    self.position = CGPointMake(size.width/2, size.height-RUNNER_OFFSET); //centered x and offseted by RUNNER_OFFSET
    return self;
}

В настоящее время приложение вылетает после выполнения этого кода.(Я определил это с помощью точек останова и комментирования строк.) Есть идеи почему?Это раздел, из которого я его вызываю:

myRunner = [[Runner alloc] init];
[self addChild:myRunner];   
//schedule an update each frame

Это метод - init подкласса CCLayer.

Вот журнал консоли:

2010-07-31 09: 16: 32.730
CubeRacer [849: 207] cocos2d: cocos2d
v0.99.4-rc2 2010-07-31 09: 16: 32.733
CubeRacer [849:207] cocos2d: Использование
Тип директора: CCDisplayLinkDirector
2010-07-31 09: 16: 33.064
CubeRacer [849: 207] cocos2d: GL_VENDOR:
Apple Computer, Inc. 2010-07-31
09: 16: 33.065 CubeRacer [849: 207]
cocos2d: GL_RENDERER: Apple Software
Renderer 2010-07-31 09: 16: 33.065
CubeRacer [849: 207] cocos2d:
GL_VERSION: OpenGL ES-CM 1.1 APPLE
2010-07-31 09: 16: 33.066
CubeRacer [849: 207] cocos2d:
GL_MAX_TEXTURE_SIZE: 2048 2010-07-31
09:16: 33.067 CubeRacer [849: 207]
cocos2d: GL_MAX_MODELVIEW_STACK_DEPTH:
16 2010-07-31 09: 16: 33.068
CubeRacer [849: 207] cocos2d: GL
поддерживает PVRTC: ДА 2010-07-31
09: 16: 33.068 CubeRacer [849: 207]
cocos2d: GL поддерживает BGRA8888
текстуры: НЕТ 2010-07-31 09: 16: 33.071
CubeRacer [849: 207] cocos2d: GL
поддерживает текстуры NPOT: ДА 2010-07-31
09: 16: 33.072 CubeRacer [849: 207]
cocos2d: GL поддерживает
discard_framebuffer: ДА 2010-07-31
09: 16: 33.072 CubeRacer [849: 207]
cocos2d: скомпилировано сПоддержка NPOT:
NO 2010-07-31 09: 16: 33.073
CubeRacer [849: 207] cocos2d: скомпилировано
с поддержкой VBO в TextureAtlas: ДА
2010-07-31 09:16: 33.074
CubeRacer [849: 207] cocos2d: скомпилировано
с преобразованием аффинной матрицы в
CCNode: ДА 2010-07-31 09: 16: 33.074
CubeRacer [849: 207] cocos2d: скомпилировано
с поддержкой профилирования: нет программы
получен сигнал: «EXC_BAD_ACCESS».

Спасибо за любую помощь!

Обновление После дополнительных исследований я обнаружил, что это может быть проблема зацикливания, но я не уверен.Инициализатор суперкласса, который я называю, вызывает [self init].Будет ли это вызывать метод - (id)init моего подкласса или CCSprite класса?Если он вызывает мой подкласс, то это очевидная проблема.Проверьте мой комментарий для ссылки на обсуждение, которое я нашел этого.

1 Ответ

0 голосов
/ 03 августа 2010

Я думаю, что ваша проблема в том, что ваш метод является назначенным инициализатором - (id) init, а затем вы вызываете в нем [super initWithFile: ..], который в свою очередь вызывает - (id) init.Теперь, поскольку вы переопределили - (id) init в своей реализации, ваша версия вызывается, и у вас будет бесконечный цикл.

Насколько я понимаю.Определенно плохая идея вызывать супер метод, отличный от [super init] в методе - (id) init.Вместо этого переименуйте ваш - (id) метод init в - (id) initWithRunnerImage, и все будет в порядке.

В документации Apple приведены еще несколько примеров: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html#//apple_ref/doc/uid/TP30001163-CH22-SW8

...