精灵套件纹理大小/分辨率

时间:2013-11-17 12:10:38

标签: ios objective-c retina-display sprite-kit asset-catalog

我刚刚开始使用Sprite Kit,并且在加载纹理精灵方面存在问题。

我在Xcode中使用Sprite Kit模板创建了一个新项目,并希望添加一个带有图像文件的简单精灵作为纹理。这是我在场景的init方法中使用的代码:

SKSpriteNode *myNode = [SKSpriteNode spriteNodeWithImageNamed:@"my_image_file"];
myNode.position = CGPointMake(100, 100);
[self addChild:myNode];

我没有将扩展名添加到图像名称,因此我的文件名为“my_image_file.png”,但我最后省略了.png。我还将场景创建移动到了viewWillLayoutSubviews方法,正如许多教程中所建议的那样。

我在模拟器中运行了该项目(使用视网膜iPhone作为设备),令我惊讶的是,精灵的出现量是我预期的两倍,而且像素也很大。看起来好像我使用的是非视网膜iPhone。据我所知,Apple Adventure示例应用程序使用相同的命名约定,精灵在那里显得很好。

我重命名了我的文件“my_image_file@2x.png”,这一切都运行良好,精灵出现了,因为我希望它在视网膜显示器上看起来。由于我有相当多的图像文件,我不想重命名它们,所有这些都可以在没有@ 2x后缀的Apple Adventure应用程序中正常工作。

如果我在SKSpriteNode上使用此方法明确定义纹理的大小,它也可以正常工作:

+ (instancetype)spriteNodeWithTexture:(SKTexture *)texture size:(CGSize)size

我清理了项目并在每次运行之间从模拟器中删除了应用程序,所以我认为这不是卡住或丢失图像文件的问题。

我也尝试在互联网上搜索Sprite Kit纹理文件命名约定是如何工作的,但是我找不到任何关于这个问题的文档。

有人可以简要解释一下它是如何工作的,或者至少向我展示一个不涉及重命名所有图像文件的解决方案,或者为我的所有精灵明确定义尺寸?

谢谢, UTR

2 个答案:

答案 0 :(得分:1)

如果您使用资产目录,则无需重命名所有文件。如果您使用Xcode SpriteKit模板创建项目,只需单击Images.xcassets即可。然后将图像拖放到适当的位置。您还可以通过执行新文件手动创建资产目录 - >资源 - >资产目录。

答案 1 :(得分:0)

我自己正在寻找一个答案,它看起来像专门冒险游戏的例子处理这样的视网膜大小:

// On iPhone/iPod touch we want to see a similar amount of the scene as on iPad.
// So, we set the size of the scene to be double the size of the view, which is
// the whole screen, 3.5- or 4- inch. This effectively scales the scene to 50%.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
   viewSize.height *= 2;
   viewSize.width *= 2;
}

我很想听到有人对这段代码进行评论,如果它确实与仅使用没有@ 2x后缀的视网膜图像有关。