以编程方式使用资产创建 SKSpriteNode

Posted

技术标签:

【中文标题】以编程方式使用资产创建 SKSpriteNode【英文标题】:Create SKSpriteNode with an Asset Programmatically 【发布时间】:2017-01-24 03:09:17 【问题描述】:

我正在尝试以编程方式创建一个SKSpriteNode 并为其提供一个位于我的Assets.xcassets 文件夹中的纹理。我认为这将是一个基本程序,但我似乎遇到了很多麻烦。

作为参考,这是我尝试将地面资产设置为 SKSpriteNode 的资产目录:

这是制作精灵节点的代码:

    sprite.texture = SKTexture(image: UIImage(named: spriteName)!)

    sprite.anchorPoint = CGPoint(x: 0, y: 1)

    sprite.position = CGPoint(x: 0, y: 0)

    referenceNode.addChild(sprite)

第一行中的变量“spriteName”将字符串“ground”传递给它。但是,当我加载游戏时,地面不见了。只是为了确保节点确实在那里,我注释掉了纹理代码,只是给了它们大小和可见的颜色。这解决了,所以我知道问题肯定出在资产引用中,而不是代码逻辑中。

我们将不胜感激任何正确方向的观点。如果需要更多信息,请尽可能具体地询问:)

谢谢, 马修

编辑:

我最初的问题可能有点太复杂了。换个更简单的说法:

我的资源库中有一个资源,名为 ground。但是,当我使用此代码设置SKSpriteNode 的纹理时...

sprite.texture = SKTexture(image: UIImage(named: "ground")!)

纹理未显示在应用程序中。我的问题:如何正确引用资源库中的图像?

【问题讨论】:

【参考方案1】:

您似乎也需要明确设置大小:

sprite.texture = SKTexture(imageNamed: "myImage1")
sprite.size = sprite.texture!.size()

..或者你可以在init中指定图片:

let sprite = SKSpriteNode(imageNamed: "myImage1")

【讨论】:

以上是关于以编程方式使用资产创建 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更新 Xcode 资产目录

如何切片图像并使用图像资产使其可拉伸

缩放 SKSpriteNode 而不缩放其子节点

如何使 UIAppearance 代理适用于以编程方式创建的视图?

如何以编程方式使系统创建交换文件?

以编程方式创建的 UICollectionView:滚动后单元格重叠