5

我刚开始使用 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

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

我还尝试在 Internet 上搜索以了解 Sprite Kit 纹理文件命名约定如何工作,但我找不到任何有关该问题的文档。

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

谢谢,utr

4

2 回答 2

1

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

于 2013-11-17T12:46:20.453 回答
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 后缀的视网膜图像有关。

于 2014-02-17T01:06:10.767 回答