我正在创建一个自定义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
方法吗?如果它调用我的子类,那么这是一个明显的问题。检查我的评论,找到我发现的讨论链接。
答案 0 :(得分:0)
我认为你的问题是你的方法是指定的初始化程序 - (id)init然后你在其中调用[super initWithFile:..],然后调用 - (id)init。现在因为你的实现中已经覆盖了 - (id)init,你的版本被调用了,你将拥有无限循环。
据我所知。在 - (id)init方法中调用除[super init]之外的超级方法是一个坏主意。相反,将您的 - (id)init方法重命名为 - (id)initWithRunnerImage,你应该没问题。