我已经问过类似的问题,但我不知道如何正确调试它。这就是问题。
我添加了一些异常处理程序(捕获所有 Objective-C)异常,这就是我所看到的结果:
问题在于 setTexture 方法,它在断言验证需要显示的纹理名称是否与当前精灵批处理节点中的相同时失败。
当试图用另一个场景替换一个场景时会发生这种情况,但并非总是发生。它与新场景有关,因为我试图通过从游戏的不同部分调用替换来“隔离”问题,但它仍然会带来麻烦。
在游戏场景中,我有几个精灵表和精灵批处理节点,但由于我无法隔离精灵表 ID,我无法理解哪个精灵帧给我带来了问题,我也不明白为什么会这样只是偶尔发生。
我想:
- 了解哪个精灵帧名称给了我 AssertionFailure
- 了解它属于哪个精灵表
这应该有助于我了解这是命名问题还是与其他问题有关。
希望不要对这个问题太蹩脚..
编辑:我尝试了答案,但我无法读取“文件名”信息,这是调试器所说的“摘要不可用”:
这就是我创建文件名属性的方式:
/** TMP: Bug solving filename */
@property (copy) NSString *fileName;
-(id) initWithTexture:(CCTexture2D*)texture rectInPixels:(CGRect)rect rotated:(BOOL)rotated offset:(CGPoint)offset originalSize:(CGSize)originalSize
{
if( (self=[super init]) )
{
self.fileName = [NSString stringWithFormat:@"GLUINT texture name: %i", texture.name];
self.texture = texture;
rectInPixels_ = rect;
rect_ = CC_RECT_PIXELS_TO_POINTS( rect );
offsetInPixels_ = offset;
offset_ = CC_POINT_PIXELS_TO_POINTS( offsetInPixels_ );
originalSizeInPixels_ = originalSize;
originalSize_ = CC_SIZE_PIXELS_TO_POINTS( originalSizeInPixels_ );
rotated_ = rotated;
}
return self;
}
-(id) initWithTextureFilename:(NSString *)filename rectInPixels:(CGRect)rect rotated:(BOOL)rotated offset:(CGPoint)offset originalSize:(CGSize)originalSize
{
if( (self=[super init]) )
{
self.fileName = fileName; //TMP
texture_ = nil;
textureFilename_ = [filename copy];
rectInPixels_ = rect;
rect_ = CC_RECT_PIXELS_TO_POINTS( rect );
offsetInPixels_ = offset;
offset_ = CC_POINT_PIXELS_TO_POINTS( offsetInPixels_ );
originalSizeInPixels_ = originalSize;
originalSize_ = CC_SIZE_PIXELS_TO_POINTS( originalSizeInPixels_ );
rotated_ = rotated;
}
return self;
}