【问题标题】:Invalid texture for sprite精灵的无效纹理
【发布时间】:2014-03-31 11:19:32
【问题描述】:

我正在尝试加载包含在 NSMutableArray 中的纹理,但出现此错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“精灵纹理无效”

这就是我试图在可变数组中引用我的纹理的方式:

background = [CCSprite spriteWithTexture:[loadedTextures objectAtIndex:0]];

这就是我生成纹理的方式:

  - (void)loadAssets {

        NSArray *imageNames = @[
                                @"bg-001.png",
                                @"bg-002.png"
                                ];

        for (NSString *imageName in imageNames)
        {
            CCTexture * tex = [CCTexture textureWithFile:imageName];
            [loadedTextures addObject:tex];
        }
    }

【问题讨论】:

  • 顺便说一句:你可以更简单地使用[CCSprite spriteWithFile:imageNames[0]]
  • 但是,这不会预加载图像

标签: objective-c cocos2d-iphone


【解决方案1】:

消息表明纹理为零。这很奇怪,因为您不能将 nil 值存储在数组中。这留下了loadedTextures 本身就是nil 的唯一可能解释。

检查这个(或类似的)行是否初始化了数组:

loadedTexture = [NSMutableArray array];

这必须在填充 loadedTextures 数组的 for 循环之前。

【讨论】:

  • 谢谢,我尝试了你的方法,并像这样打印数组 NSLog(@"try preloadedtexture %@", [loadedTextures objectAtIndex:0]);然后我在日志中得到这个尝试 preloadedtexture 这对我来说看起来不为零
  • 啊,那是一个CCProxy,用来替换纹理缓存。返回一个 CCProxy 对象而不是纹理或精灵帧,该对象对纹理/精灵帧具有弱引用。如果纹理没有在其他地方使用,则代理的目标(纹理)将为 nil,因此 CCSprite 会正确抱怨,尽管它应该加载纹理。可能是 v3 中的一个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2018-08-20
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多