【发布时间】:2016-01-22 19:27:46
【问题描述】:
我正在制作一个场景,其中在场景背景中播放的歌曲的歌词在 spriteKit 场景的底部逐行显示。我尝试了许多不同的解决方案,但由于某种原因,其中的每一个都没有显示某些歌词或不同步。我试图使用 SKLabelNode 并使用 SKActions 在特定时间更改它的文本。必须有更简单的方法来做到这一点!?
这是我想出的功能:
import SpriteKit
let lyrics = SKLabelNode(fontNamed: "avenirnext")
func lyricSectionCreate(lnOneTxt: String, lnOneTime: Double, lnTwoTxt: String, lnTwoTime: Double, lnThreeTxt: String, lnThreeTime: Double, lnFourTxt: String, lnFourTime: Double, lnFiveTxt: String, lnFiveTime: Double, lnSixTxt: String, lnSixTime: Double, lnSevenTxt: String, lnSevenTime: Double, lnEightTxt: String, lnEightTime: Double, lnNineTxt: String, lnNineTime: Double, lnTenTxt: String, lnTenTime: Double){
lyrics.position = CGPoint(x:250, y: 25)
lyrics.zPosition = 5
//line one
let lnOne = SKAction.runBlock { () -> Void in
lyrics.text = lnOneTxt
}
runAfterDelay(lnOneTime){
lyrics.runAction(lnOne)
}
//line two
let lnTwo = SKAction.runBlock { () -> Void in
lyrics.text = lnTwoTxt
}
runAfterDelay(lnTwoTime){
lyrics.runAction(lnTwo)
}
//line three
let lnThree = SKAction.runBlock { () -> Void in
lyrics.text = lnThreeTxt
}
runAfterDelay(lnThreeTime){
lyrics.runAction(lnThree)
}
//line four
let lnFour = SKAction.runBlock { () -> Void in
lyrics.text = lnFourTxt
}
runAfterDelay(lnFourTime){
lyrics.runAction(lnFour)
}
//line five
let lnFive = SKAction.runBlock { () -> Void in
lyrics.text = lnFiveTxt
}
runAfterDelay(lnFiveTime){
lyrics.runAction(lnFive)
}
//line six
let lnSix = SKAction.runBlock { () -> Void in
lyrics.text = lnSixTxt
}
runAfterDelay(lnSixTime){
lyrics.runAction(lnSix)
}
//line seven
let lnSeven = SKAction.runBlock { () -> Void in
lyrics.text = lnSevenTxt
}
runAfterDelay(lnSevenTime){
lyrics.runAction(lnSeven)
}
//line eight
let lnEight = SKAction.runBlock { () -> Void in
lyrics.text = lnEightTxt
}
runAfterDelay(lnEightTime){
lyrics.runAction(lnEight)
}
//line nine
let lnNine = SKAction.runBlock { () -> Void in
lyrics.text = lnNineTxt
}
runAfterDelay(lnNineTime){
lyrics.runAction(lnNine)
}
//line ten
let lnTen = SKAction.runBlock { () -> Void in
lyrics.text = lnTenTxt
}
runAfterDelay(lnTenTime){
lyrics.runAction(lnTen)
}
}
func runAfterDelay(delay: NSTimeInterval, block: dispatch_block_t) {
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
dispatch_after(time, dispatch_get_main_queue(), block)
}
【问题讨论】:
标签: swift sprite-kit skaction sklabelnode