gpt4 book ai didi

ios - 如何在需要时生成 SKSpriteNode?

转载 作者:搜寻专家 更新时间:2023-11-01 06:47:06 25 4
gpt4 key购买 nike

我的 SpriteKit 游戏中有几个 SKSpriteNode,例如暂停背景和游戏结束场景以及按钮。现在,我在 didMoveToView 中声明并添加它们,并使用如下内容:

let pauseButton = SKSpriteNode(imageNamed: "pauseButton")
let pauseBackground = SKSpriteNode (imageNamed: "pauseBackground")
let resumeButton = SKSpriteNode (imageNamed: "resumeButton")

然后,我正在初始化它们:

self.pauseButton.anchorPoint = CGPointMake(0.5, 0.5)
self.pauseButton.position = CGPointMake(CGRectGetWidth(self.frame) - self.cookieSpot / 3, CGRectGetMaxY(self.frame) - self.cookieSpot / 3)
pauseButton.size = self.pauseButton.size
pauseButton.name = "pauseButton"
pauseButton.zPosition = 1000

pauseBackground.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
self.pauseBackground.hidden = true
self.pauseBackground.name = "pauseBackground"
self.pauseBackground.zPosition = +1
resumeButton.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame) + self.resumeButton.size.height * 2 + self.resumeButton.size.height - self.resumeButton.size.height / 4)
self.resumeButton.hidden = true
self.resumeButton.name = "resumeButton"
self.resumeButton.zPosition = +1

然后添加它们:

self.addChild(pauseBackground)
self.addChild(resumeButton)
self.addChild(gameOverBackground)

当不需要它并且当用户点击暂停按钮时,我正在尝试使用这样的东西:

for touch: AnyObject in touches {
let location = touch.locationInNode(self)
switch self.nodeAtPoint(location) {
case pauseButton:
self.pauseBackground.hidden = false
self.resumeButton.hidden = false
self.scene?.view?.paused = true
case resumeButton:
self.pauseBackground.hidden = true
self.resumeButton.hidden = true
self.scene?.view?.paused = false
default:
println("not good")

}
}

那根本不适合我。我猜他们正在产卵,但他们是看不见的。如何在不需要节点时存储这些节点并在适当的时候生成它们?

最佳答案

添加节点在 runloop 结束时完成并且您在此之前暂停了 View ...我想问题与此有关(对其进行了测试,我得到了相同的结果)。在 Obj-C 中,一个简单的解决方法是使用 performSelector描述的方法 here .在 Swift 中它变得更棘手,你应该使用类似 dispatch_after 的东西或者使用类似 this 的东西(使用 NSTimer)。希望这个对你有帮助。这也不是一个确定的答案,对于同一个问题可能有更多的解决方案。

编辑:

我刚刚发现可行 solution (暂停在某些方法中移动):

func pauseGame()
{
self.scene?.view?.paused = true
}

然后在touchesBegan中调用

 self.runAction(SKAction.runBlock(self.pauseGame))

您的 touchesBegan 应该看起来像这样:

 override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

for touch: AnyObject in touches {
let location = touch.locationInNode(self)
switch self.nodeAtPoint(location) {
case pauseButton:
self.pauseBackground.hidden = false
self.resumeButton.hidden = false

self.runAction(SKAction.runBlock(self.pauseGame))
case resumeButton:
self.pauseBackground.hidden = true
self.resumeButton.hidden = true
self.scene?.view?.paused = false
default:
println("not good")

}
}
}

关于ios - 如何在需要时生成 SKSpriteNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com