纹理图集中的纹理未加载或出现

Posted

技术标签:

【中文标题】纹理图集中的纹理未加载或出现【英文标题】:Textures from texture atlas are not loading or appearing 【发布时间】:2015-10-09 04:30:53 【问题描述】:

由于某些奇怪的原因,我的纹理图集中的纹理没有加载。我不知道为什么。

以下是我通常如何声明/编码纹理

     -(SKSpriteNode *)background 
SKSpriteNode *background;
NSArray *backgroundIpad;

    background = [SKSpriteNode spriteNodeWithImageNamed:@"dodgR - main background"];
    background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    background.size = CGSizeMake(1136, 640);

    NSArray *backgroundIphone = @[[SKTexture textureWithImageNamed:@"dodgR - animation 1.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 2.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 3.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 4.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 5.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 6.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 7.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 8.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 9.jpg"],
                                  [SKTexture textureWithImageNamed:@"dodgR - animation 10.jpg"]];

    SKAction *backgroundIphoneAnimation = [SKAction animateWithTextures:backgroundIphone timePerFrame:0.05];

    SKAction *backgroundIphoneRepeat = [SKAction repeatActionForever:backgroundIphoneAnimation];

    [background runAction:backgroundIphoneRepeat];






background.name = @"background";
return background;

我的纹理图集的名称是 sprites.atlas 任何帮助将不胜感激,谢谢

【问题讨论】:

尝试从图像名称中删除 .jpg 。如果这没有帮助,请删除模拟器的内容和设置/从设备中删除应用程序,然后再次构建并运行。而且,您如何看待“不加载”?您是否看到缺少资源图像(带有红色 X 的白色图像)或发生了其他事情?另外,您的背景节点是否正确添加到场景中? 所有节点都包含一个红色 X。删除 .jpg 没有帮助 纹理出现在屏幕上的唯一时间是它们不在图集中时 我并没有过多关注您的代码,而是关注您遇到的问题......因此,正如 Beau Young 所说,您必须在代码中正确使用地图集才能从他们。 【参考方案1】:

您上面的代码仅在使用不在纹理图集中的图像时才有效,因为它实际上并没有使用纹理图集。

如果不使用 SKTextureAtlas,就无法从 Atlas(据我所知)中提取图像。所以你不能直接抓取这些图像。

斯威夫特:

let atlas = SKTextureAtlas(named: "BackgroundImages") // atlas name
var backgroundFrames = [SKTexture]()

let imageCount = atlas.textureNames.count
for var i=1; i<= imageCount/2; i++ 
  let textureName = "dodgR - animation \(i)"
  backgroundFrames.append(atlas.textureNamed(textureName))

OBJECTIVE-C(未测试)

SKTextureAtlas *atlas = [SKTextureAtlas named:@"BackgroundImages"]; // atlas name
NSMutableArray *backgroundFrames = [NSMutableArray new];

int imageCount = atlas.textureNames.count;

for (int i = 1; i <= imageCount/2; i++) 
   NSString *textureName = @"dodgR - animation \(i)";
   [bacgroundFrames addObject:[atlas textureNamed:textureName]];

奖励:Xcode 7 现在允许您在资产文件夹中创建精灵图集。

【讨论】:

以上是关于纹理图集中的纹理未加载或出现的主要内容,如果未能解决你的问题,请参考以下文章

使用纹理图集时 SpriteKit 中的高内存使用率

SpriteKit 在哪里为数千个精灵加载纹理图集

无法在 Swift 操场上加载纹理图集?

如果我稍后使用 SKTextureAtlas,Sprite Kit 是不是会多次加载纹理图集?

SpriteKit animateWithTextures 不适用于纹理图集

在 SpriteKit 项目中使用精灵图集、纹理图集或资产目录