【发布时间】:2016-11-06 12:49:31
【问题描述】:
我正在使用 SpriteKit 在 Swift 中为我的 iOS 应用程序创建一个随机项目微调器,但目前我的方法不是很有效,我几乎可以肯定它不是实现我的目标的最佳方法。我目前正在遵循的过程基本上是。
- 在场景加载时,循环浏览包含 13 个不同项目的列表(以 JSON 格式存储)
- 创建一组显示相关数据的节点
- 将每组节点添加到第二组节点,沿 x 轴稍微移动每个节点,创建一长串 SKNode(用于微调器的项目)
- 沿着 x 轴移动该组,给人一种它在项目中旋转的印象
但是这种方法甚至需要大约 6 秒才能加载场景(并且延迟是将节点添加到更大的节点:group.addChild(spinnerItem),因为我只是 Swift 的新手,我相信我有更好的方法这样做,因此任何帮助/建议感谢改进此代码,因为它迫切需要提高效率!
这里是 didMove 函数...
override func didMove(to view: SKView) {
var xPos = CGFloat(self.frame.width + 150)
var eventWeapon = weapon()
for n in 0...13{
eventWeapon = getWeapon(caseName: "chromaCase", weaponID: n)
print(eventWeapon)
let texture = createSpinnerItem(wName: "\(eventWeapon.name)", wSkin: "\(eventWeapon.skin)", wColor: "\(eventWeapon.color)")
let spinnerItem = SKSpriteNode(texture: texture)
spinnerItem.position = CGPoint(x: xPos, y: self.frame.height / 2)
group.addChild(spinnerItem)
xPos = xPos + 300 * 1.2
}
self.addChild(group)
group.run(SKAction.moveBy(x: -5000, y: 0, duration: 2))
}
以及其中使用的createSpinnerItem 函数......
func createSpinnerItem(wName: String, wSkin: String, wColor: String) -> SKTexture {
let object = SKNode()
let bGround = SKShapeNode(rectOf: CGSize(width: 300, height: 300))
bGround.fillColor = color.offWhite
bGround.strokeColor = color.gray
bGround.lineWidth = 5
object.addChild(bGround)
let titleBG = SKShapeNode(rectOf: CGSize(width: 300, height: 100))
if wColor == "blue"{ titleBG.fillColor = color.CSGOblue }
if wColor == "red"{ titleBG.fillColor = color.CSGOred }
if wColor == "pink"{ titleBG.fillColor = color.CSGOpink }
if wColor == "purple"{ titleBG.fillColor = color.CSGOpurple }
titleBG.strokeColor = color.gray
titleBG.lineWidth = 5
titleBG.position = CGPoint(x: 0, y: -150 + 50)
object.addChild(titleBG)
let weaponName = SKLabelNode()
weaponName.text = wName
weaponName.fontColor = color.white
weaponName.fontSize = 40
weaponName.fontName = "Avenir-Regular"
weaponName.verticalAlignmentMode = .center
weaponName.position = CGPoint(x: 0, y: -150 + 70)
object.addChild(weaponName)
let weaponSkin = SKLabelNode()
weaponSkin.text = wSkin
weaponSkin.fontColor = color.white
weaponSkin.fontSize = 20
weaponSkin.fontName = "Avenir-Regular"
weaponSkin.verticalAlignmentMode = .center
weaponSkin.position = CGPoint(x: 0, y: -150 + 30)
object.addChild(weaponSkin)
return object
}
【问题讨论】:
-
问题 - 为什么人们总是在标题中添加标签?
-
嗯?我相信我已将我的标签放在帖子的相关
Tags部分中 -
您在标题中添加了“Swift”。不需要,标签中已经说明你使用的是Swift。
-
@LuckyBowers:所以只有
didMove需要6 秒?或者您是否正在考虑整个启动过程。你在哪个设备上测试它? -
@appzYourLife 好吧,这一切都运行得非常顺利,但是当将节点添加到
group父节点时,每次迭代都会延迟相当多的时间。我正在 iPhone6 上测试
标签: ios swift sprite-kit