我正在使用spriteKit和swift在Xcode 6中制作游戏。我现场有一架飞机,为了使它看起来像移动,我在屏幕左边的场景中创建了云。然后我们将SKAction移动到屏幕的右侧。这非常有效。然后单击以从平面上跳下,并且平面向上移动离开场景。然后我开始在场景的底部制作云,然后它们从场景的顶部向上移动,但问题是,已经存在的云仍然必须移动到屏幕的右侧。我的问题是,我如何做到这一点,以便所有现有的云停止他们的行动,使他们向右移动,然后开始准确向上移动?如何在创建现有云的同时访问它们?当你点击屏幕打开降落伞跳跃时我也希望云速度减慢,但这应该可以通过结束移动云的SKAction,然后在它们上使用另一个SKAction来移动它们更慢,但我不知道如何访问一组SKSpriteNodes。
以下是我制作云端的代码:
//This is how the cloud is first declared at the top of the .swift file
var cloud = SKSpriteNode()
//This is the function that runs every certain interval through an NSTimer
func createCloud()
{
cloud = SKSpriteNode(imageNamed: "cloud")
cloud.xScale = 1.25
cloud.yScale = cloud.xScale/2
cloud.zPosition = -1
self.addChild(cloud)
if personDidJump == false
{
let moveRight = SKAction.moveToX(CGRectGetWidth(self.frame) + CGRectGetWidth(cloud.frame), duration: cloudSpeed)
var apple = CGRectGetWidth(self.frame)
var randomNumber:CGFloat = CGFloat(arc4random_uniform(UInt32(apple)))
cloud.position = CGPointMake(-CGRectGetWidth(cloud.frame), randomNumber)
cloud.runAction(moveRight)
}
if personDidJump == true
{
let moveUp = SKAction.moveToY(CGRectGetHeight(self.frame) + CGRectGetWidth(cloud.frame), duration: cloudSpeed)
var apple = CGRectGetWidth(self.frame)
var randomNumber:CGFloat = CGFloat(arc4random_uniform(UInt32(apple)))
cloud.position = CGPointMake(randomNumber, -CGRectGetHeight(cloud.frame))
cloud.runAction(moveUp)
}
}
另外,当他们离开现场时,我是否应该担心删除云?或者我可以把它们留在那里,因为你无法看到它们,而且从我所看到的,它们不会落后于你。 任何帮助将不胜感激。谢谢。
-Callum -
答案 0 :(得分:0)
将您的云放入数组中。当您的播放器跳转时(或者当您需要移动它们时)运行阵列并在每个云上运行您的操作。
答案 1 :(得分:0)
stackoverflow.com/a/24213529/3402095
^这就是我发现我的回答^
当您创建节点时,请为其命名:
myNode.name = "A Node Name"
self.addChild(myNode)
如果有很多这些节点,稍后您可以在这些节点上更改属性或预先形成SKAcions,或使用enumerateChildNodesWithName执行您想要执行的操作:
self.enumerateChildNodesWithName("A Node Name")
{
myNode, stop in
myNode.runAction(SKAction.moveToY(CGRectGetHeight(self.Frame), duration: 1)
}
我希望这对任何可能需要它的人都有用。