CCSprite初始化程序导致崩溃,没有异常或错误

时间:2010-07-31 03:20:39

标签: iphone objective-c cocoa cocoa-touch cocos2d-iphone

我正在创建一个自定义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

这是CCLayer子类的- init方法。

这是控制台日志:

  

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软件
  渲染器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
  纹理:NO 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:编译了   在TextureAtlas中支持VBO:是
  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”。

感谢您的帮助!

更新 经过一些研究后,我发现这可能是一个循环问题,但我不确定。 我正在调用的超类初始化程序调用{​​{1}}。这会调用我的子类或[self init]类的- (id)init方法吗?如果它调用我的子类,那么这是一个明显的问题。检查我的评论,找到我发现的讨论链接。

1 个答案:

答案 0 :(得分:0)

我认为你的问题是你的方法是指定的初始化程序 - (id)init然后你在其中调用[super initWithFile:..],然后调用 - (id)init。现在因为你的实现中已经覆盖了 - (id)init,你的版本被调用了,你将拥有无限循环。

据我所知。在 - (id)init方法中调用除[super 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