Swift 如何使跑步拦网动作快速完成
您好,我已经尝试这么做很长时间了,我正在使用Swift SpriteKit,我的问题是我需要为节点执行runBlock操作如何执行运行函数的操作我尝试了以下操作:Swift 如何使跑步拦网动作快速完成,swift,sprite-kit,Swift,Sprite Kit,您好,我已经尝试这么做很长时间了,我正在使用Swift SpriteKit,我的问题是我需要为节点执行runBlock操作如何执行运行函数的操作我尝试了以下操作: var a = SKAction.runBlock({() in self.spawn1()}) 请参考spawn1函数。 提前谢谢 以下是我的代码,以帮助您对第一个答案进行评论: // // PlaysScene.swift // Pocket Rocket3 // // Created by Lucas F
var a = SKAction.runBlock({() in self.spawn1()})
请参考spawn1函数。提前谢谢 以下是我的代码,以帮助您对第一个答案进行评论:
//
// PlaysScene.swift
// Pocket Rocket3
//
// Created by Lucas Farleigh on 27/11/2014.
// Copyright (c) 2014 Lucas Farleigh. All rights reserved.
//
import spriteKit
class PlayScene:SKScene {
//declaring the node in this scene!
let background = SKSpriteNode(imageNamed: "background")
let bar1 = SKSpriteNode(imageNamed:"bar1")
let bar2 = SKSpriteNode(imageNamed:"bar2")
let bar3 = SKSpriteNode(imageNamed:"bar3")
let bar4 = SKSpriteNode(imageNamed:"bar4")
let bar5 = SKSpriteNode(imageNamed:"bar5")
let bar6a = SKSpriteNode(imageNamed: "bar6")
let bar6b = SKSpriteNode(imageNamed: "bar6")
let bar6c = SKSpriteNode(imageNamed: "bar6")
let bar6d = SKSpriteNode(imageNamed: "bar6")
let bar6e = SKSpriteNode(imageNamed: "bar6")
let bar6f = SKSpriteNode(imageNamed: "bar6")
let bar6g = SKSpriteNode(imageNamed: "bar6")
let bar6h = SKSpriteNode(imageNamed: "bar6")
let bar6i = SKSpriteNode(imageNamed: "bar6")
let bar6j = SKSpriteNode(imageNamed: "bar6")
//making actions
override func didMoveToView(view: SKView) {
var actionmove = SKAction.moveToY(0, duration: 15)
var delay = SKAction.waitForDuration(NSTimeInterval(1.5))
var delchild = SKAction.removeFromParent()
func spawn1(){
bar6a.position = CGPointMake(800 ,CGRectGetMaxY(self.frame))
bar6b.position = CGPointMake(1600,CGRectGetMaxY(self.frame))
addChild(bar6a)
addChild(bar6b)
}
func spawn2 (){
bar6c.position = CGPointMake(400 ,CGRectGetMaxY(self.frame))
bar6d.position = CGPointMake(1200,CGRectGetMaxY(self.frame))
addChild(bar6c)
addChild(bar6d)
}
func spawn3 (){
bar6e.position = CGPointMake(600 ,CGRectGetMaxY(self.frame))
bar6f.position = CGPointMake(1400,CGRectGetMaxY(self.frame))
addChild(bar6e)
addChild(bar6f)
}
func spawn4 (){
bar6g.position = CGPointMake(700 ,CGRectGetMaxY(self.frame))
bar6h.position = CGPointMake(1500,CGRectGetMaxY(self.frame))
addChild(bar6g)
addChild(bar6h)
}
func spawn5 (){
bar6i.position = CGPointMake(700 ,CGRectGetMaxY(self.frame))
bar6j.position = CGPointMake(1500,CGRectGetMaxY(self.frame))
addChild(bar6i)
addChild(bar6j)
}
var a = SKAction.runBlock({ self.spawn1() })
var b = SKAction.runBlock(spawn2)
var c = SKAction.runBlock(spawn3)
var d = SKAction.runBlock(spawn4)
var e = SKAction.runBlock(spawn5)
var delayA = SKAction.waitForDuration(NSTimeInterval(1.5))
var delayB = SKAction.waitForDuration(NSTimeInterval(2))
var delayC = SKAction.waitForDuration(NSTimeInterval(4))
var delayD = SKAction.waitForDuration(NSTimeInterval(6))
var delayE = SKAction.waitForDuration(NSTimeInterval(8))
var sequence1 = SKAction.sequence([delayA,a,actionmove,delchild])
var sequence2 = SKAction.sequence([delayB,b,actionmove,delchild])
var sequence3 = SKAction.sequence([delayC,c,actionmove,delchild])
var sequence4 = SKAction.sequence([delayD,d,actionmove,delchild])
var sequence5 = SKAction.sequence([delayE,e,actionmove,delchild])
var repeat1 = SKAction.repeatActionForever(sequence1)
var repeat2 = SKAction.repeatActionForever(sequence2)
var repeat3 = SKAction.repeatActionForever(sequence3)
var repeat4 = SKAction.repeatActionForever(sequence4)
var repeat5 = SKAction.repeatActionForever(sequence5)
//actionmove: making it smooth
actionmove.timingMode = SKActionTimingMode.EaseOut
//doing stuff with the background
background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
background.yScale = 10.0
background.xScale = 10.0
addChild(background)
//running the actions
bar6a.runAction(repeat1)
bar6b.runAction(repeat1)
bar6c.runAction(repeat2)
bar6d.runAction(repeat2)
bar6e.runAction(repeat3)
bar6f.runAction(repeat3)
bar6g.runAction(repeat4)
bar6h.runAction(repeat4)
bar6i.runAction(repeat5)
bar6j.runAction(repeat5)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
}
}
我这样做了,但在你给我的那行上,它给出了一个错误,说“PlaySecene没有名为'spawn1'的成员”。我的代码经过编辑,因此你可以看到我的所有代码。就像LearnCos2D所说的。您将函数放在其他函数中,因此它们不可调用。将它们直接放在类的主体中。我这样做了,但在您给我的行中出现了一个错误,即“PlaySecene没有名为'spawn1'的成员”。我的代码经过编辑,因此您可以查看我的所有代码。如LearnCos2D所述。您将函数放在其他函数中,因此它们不可调用。将它们直接放在类的主体中。我这样做了,但在您给我的行中出现了一个错误,即“PlaySecene没有名为'spawn1'的成员”。我的代码经过编辑,因此您可以查看我的所有代码。如LearnCos2D所述。您将函数放在其他函数中,因此它们不可调用。将它们直接放在类的主体中。我这样做了,但在您给我的行中出现了一个错误,即“PlaySecene没有名为'spawn1'的成员”。我的代码经过编辑,因此您可以查看我的所有代码。如LearnCos2D所述。您将函数放在其他函数中,因此它们不可调用。将它们直接放在类的主体中。将所有函数放在didMoveToView函数中,因此无法通过编写self.spawn1()来访问它们,因为它们不是类的函数,而是只能从didMoveToView中访问的局部函数。如果这不是问题,请发布您收到的错误消息。等等,当我将它们移出didMoveToView()并运行它时出现问题,它将转到app delegate并说线程1:signal Sagrbty您将所有函数都放在didMoveToView函数中,因此无法通过编写self.spawn1()来访问它们因为它们不是类的函数,而是只能从didMoveToView中访问的本地函数。如果这不是问题,请发布您收到的错误消息。等等,当我将它们移出didMoveToView()并运行它时出现问题,它将转到app delegate并说线程1:signal Sagrbty您将所有函数都放在didMoveToView函数中,因此无法通过编写self.spawn1()来访问它们因为它们不是类的函数,而是只能从didMoveToView中访问的本地函数。如果这不是问题,请发布您收到的错误消息。等等,当我将它们移出didMoveToView()并运行它时出现问题,它将转到app delegate并说线程1:signal Sagrbty您将所有函数都放在didMoveToView函数中,因此无法通过编写self.spawn1()来访问它们因为它们不是类的函数,而是只能从didMoveToView中访问的本地函数。如果这不是问题,请发布您收到的错误消息。等等,当我将它们移出didMoveToView()并运行它时出现问题,它将转到应用程序委托并显示线程1:signal SAGRBT
var a = SKAction.runBlock({ self.spawn1() })
yournode.runAction(a)