SKActionが実行され、そのアクションが終わった時に呼ばれる関数というものは存在しますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
すみません。今の私ですと、timerを使った方法しか思い浮かびません。
他に良い回答がありましたら、よろしくお願いします。
swift
1import SpriteKit 2 3class GameScene: SKScene { 4 5 //ラベル等の設定 6 let myLabel = SKLabelNode() 7 let mySprite = SKSpriteNode(color: SKColor.blueColor(), size:CGSizeMake(100,100)) 8 let action = SKAction.rotateByAngle(CGFloat(60 * M_PI / 180), duration: 1) 9 let wait = SKAction.waitForDuration(3) 10 let action2 = SKAction.scaleTo(2, duration: 1) 11 let action3 = SKAction.scaleTo(3, duration: 1) 12 13 var backgroundDate: NSDate! 14 var timerCount:Float = 2 15 var timer:NSTimer = NSTimer() 16 var timerLabel = SKLabelNode() 17 18 override func didMoveToView(view: SKView) { 19 mySprite.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)) 20 startTimer() 21 addChild(mySprite) 22 addChild(timerLabel) 23 24 } 25 26 //SKAction 27 func Question1(){ 28 mySprite.runAction(action) 29 30 } 31 32 func Question2(){ 33 mySprite.runAction(action2) 34 35 } 36 func Question3(){ 37 mySprite.runAction(action3) 38 39 } 40 41 //タイマー 42 func startTimer(){ 43 if timer.valid { 44 timer.invalidate() 45 } 46 timer = NSTimer(timeInterval: 0.1, target: self, selector: #selector(GameScene.countDown2(_:)), userInfo: nil, repeats: true) 47 NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes) 48 } 49 50 func countDown2(timer: NSTimer) { 51 timerCount += 0.1 52 let str = "Time:".stringByAppendingFormat("%.1f",timerCount) 53 timerLabel.text = str 54 timerLabel.fontColor = UIColor.blackColor() 55 timerLabel.fontSize = 50 56 timerLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)+100) 57 58 //1つ目のSKActionが10秒で終わるなら、次の時間を10秒にすれば次のアクションが始まる 59 if timerCount < 5 { 60 Question1() 61 62 } else if timerCount < 10 { 63 64 Question2() 65 66 } else if timerCount < 15 { 67 Question3() 68 } 69 }
投稿2016/04/07 14:15
総合スコア51
0
こんばんわ。初めての回答になります。
私自身も初心者の為、参考になれば幸いです。
間違っている記載があるかもしれませんが、ご容赦下さい。
Swift
1 2class GameScene: SKScene { 3 4 let myLabel = SKLabelNode() 5 6 7 override func didMoveToView(view: SKView) { 8 9 10 //Finishを表示する準備 11 myLabel.text = "Finish" 12 myLabel.fontSize = 45 13 myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)) 14 myLabel.alpha = 0 15 self.addChild(myLabel) 16 17 //1.音を鳴らす 18 let playSound = SKAction.playSoundFileNamed("sound.mp3.wav", waitForCompletion: true) 19 20 //2.音を鳴らしてから次のアクションまで停止する時間 21 let wait = SKAction.waitForDuration(3) 22 23 //3.文字を表示する 24 let action = SKAction.fadeAlphaTo(1,duration: 0.5) 25 26 //1.2.3の動きをまとめて順番に実行するアクション 27 let actionX = SKAction.sequence([playSound, wait, action]) 28 29 //アクションを実行 30 myLabel.runAction(actionX) 31 }}
sound.mp3の再生時間が20秒だとした場合、待ち時間を20秒に設定しておけば、
再生の終了と同時にFinishが表示されます。
投稿2016/04/06 13:04
編集2016/04/06 13:08総合スコア51
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ご丁寧にどうもありがとうございます。
ラベルノードを透明にしてSKActionの中にある、透明度を変えてラベルを見えるようにするアクションを使うという方法でご回答を頂きましたが、SKAction以外の動作につなげていくことはできませんか?例えば、あるSKActionが終わった後に呼び出される関数を作ることは可能ですか?
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。