前提・実現したいこと
プログラミング初心者です。
swiftでSpriteKitを使用してモグラたたきのゲームを作っています。
3種類のモグラを用意し、穴から出てくるモグラをランダムに表示したいです。
timerのメソッドを利用してランダムに表示することは自体はできたのですが、
2度目以降に表示されるモグラがタップしても反応しなくなりました。
どのようにしたら反応するようにできるのでしょうか。
どなたかご教示いただきたく、よろしくお願いいたします。
発生している問題・エラーメッセージ
エラーメッセージはありません。
import UIKit
import SpriteKit
import GameplayKit
import AVFoundation
class GameScene: SKScene,SKPhysicsContactDelegate {
///モグラの位置 var enemyPoint = [[150,250],[250,600],[200,800],[500,400],[550,150],[650,700],[550,950],[300,1100]] ///モグラを入れる配列 var enemy01Array:[SKSpriteNode] = [] var enemy02Array:[SKSpriteNode] = [] var enemy03Array:[SKSpriteNode] = [] //タイマー var enemyTimer = Timer() override func didMove(to view: SKView) { //もぐらの穴 for i in 0...7{ let hole = SKSpriteNode(imageNamed:"hole.png") hole.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1]) hole.xScale = 0.8 hole.yScale = 0.8 self.addChild(hole) } //タイマーの設定 enemyTimer = Timer.scheduledTimer( timeInterval: 3.5, target:self, selector:#selector(GameScene.randomLoop), userInfo:nil,repeats:true) } //モグラをランダムに表示 func randomLoop(){ for i in 0...7{ let random = Int(arc4random_uniform(20)) let enemy01 = SKSpriteNode(imageNamed: "enemy01.png") enemy01.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1]) let enemy02 = SKSpriteNode(imageNamed: "enemy02.png") enemy02.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1]) let enemy03 = SKSpriteNode(imageNamed: "enemy03.png") enemy03.position = CGPoint(x:enemyPoint[i][0],y:enemyPoint[i][1]) enemy01Array.append(enemy01) enemy02Array.append(enemy02) enemy03Array.append(enemy03) if(random>0 && random<13){ self.addChild(enemy01) }else if(random>=13 && random<18){ self.addChild(enemy02) }else{ self.addChild(enemy03) } let action1 = SKAction.wait(forDuration: 0.8,withRange:2.0) let action2 = SKAction.hide() let action3 = SKAction.wait(forDuration: 0.5,withRange:2.0) let action4 = SKAction.unhide() let actionS = SKAction.sequence([action1,action2,action3,action4]) enemy01.run(actionS) enemy02.run(actionS) enemy03.run(actionS) } } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch:AnyObject = touches.first{ let location = touch.location(in:self) let touchNode = self.atPoint(location) for i in 0...7{ if touchNode == enemy01Array[i]{ let enemy01 = SKSpriteNode(imageNamed:"enemy01") enemy01.position = touchNode.position self.addChild(enemy01) //モグラを1回転するアクション let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.2) let action2 = SKAction.moveTo(y: touchNode.position.y + 150,duration: 0.2) let actionG = SKAction.group([action1,action2]) let action3 = SKAction.removeFromParent() let actionS = SKAction.sequence([actionG,action3]) enemy01.run(actionS) touchNode.position.y = -100 }else if touchNode == enemy02Array[i]{ let enemy02 = SKSpriteNode(imageNamed:"enemy02") enemy02.position = touchNode.position self.addChild(enemy02) //モグラを1回転するアクション let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.3) let action2 = SKAction.moveTo(y: touchNode.position.y + 150,duration: 0.3) let actionG = SKAction.group([action1,action2]) let action3 = SKAction.removeFromParent() let actionS = SKAction.sequence([actionG,action3]) enemy02.run(actionS) touchNode.position.y = -100 }else if touchNode == enemy03Array[i]{ let enemy03 = SKSpriteNode(imageNamed:"enemy03") enemy03.xScale = 0.6 enemy03.yScale = 0.6 enemy03.position = touchNode.position self.addChild(enemy03) //モグラを1回転するアクション let action1 = SKAction.rotate(byAngle: 6.28, duration: 0.3) let action2 = SKAction.moveTo(y: touchNode.position.y + 150,duration: 0.3) let actionG = SKAction.group([action1,action2]) let action3 = SKAction.removeFromParent() let actionS = SKAction.sequence([actionG,action3]) enemy03.run(actionS) touchNode.position.y = -100 } } } } override func update(_ currentTime: TimeInterval) { // Called before each frame is rendered }
}
swift
enemy01Array.appendの位置を何度か変えてみましたが改善されませんでした。
補足情報(FW/ツールのバージョンなど)
swift3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/23 09:30
2021/01/23 13:27
2021/01/23 16:00