[Swift]SpriteKit_タップするとネズミが座標を移動する
タップするとネズミの画像が座標を移動するサンプルコードです。
コードの前提
・GameSceneを使うため、プロジェクトの設定でSpriteKitゲームテンプレートを選択している必要あり
・GameScene クラスで、白い背景にネズミのスプライトを表示
・touchesBegan メソッドで、画面がタッチされたときにネズミが新しい位置に移動するようにしている。
タップすると画像が上下に動くだけのシンプルなコード
import SpriteKit class GameScene: SKScene { let mouseNode = SKSpriteNode(imageNamed: "mouse") var isMouseAboveCenter = false override func didMove(to view: SKView) { backgroundColor = SKColor.white // シーンのサイズとアンカーポイントを設定 self.size = view.bounds.size self.anchorPoint = CGPoint(x: 0.5, y: 0.5) // ネズミの初期位置をシーンの中心に設定 mouseNode.position = CGPoint(x: 0, y: 0) mouseNode.size = CGSize(width: mouseNode.size.width / 5, height: mouseNode.size.height / 5) addChild(mouseNode) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { // ネズミを画面中央の上か下に移動 moveMouse() } func moveMouse() { let centerY = 0 // シーンの中心Y座標 let moveToY: CGFloat if isMouseAboveCenter { // 画面中央より少し下に移動 moveToY = CGFloat(centerY - 50) // 50は任意のオフセット値 } else { // 画面中央より少し上に移動 moveToY = CGFloat(centerY + 50) // 50は任意のオフセット値 } // 移動先が画面外に出ないように制限 let safeAreaInsets = view?.safeAreaInsets ?? UIEdgeInsets.zero let minY = safeAreaInsets.bottom - size.height / 2 let maxY = size.height / 2 - safeAreaInsets.top let clampedY = max(minY, min(moveToY, maxY)) let moveAction = SKAction.moveTo(y: clampedY, duration: 0.5) mouseNode.run(moveAction) // ネズミの位置をトラッキング isMouseAboveCenter.toggle() } }
ネズミの近くをタップするとランダムな座標に移動
import SpriteKit class GameScene: SKScene { let mouseNode = SKSpriteNode(imageNamed: "mouse") override func didMove(to view: SKView) { backgroundColor = SKColor.white self.size = view.bounds.size self.anchorPoint = CGPoint(x: 0.5, y: 0.5) mouseNode.position = CGPoint(x: 0, y: 0) mouseNode.size = CGSize(width: mouseNode.size.width / 5, height: mouseNode.size.height / 5) addChild(mouseNode) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { guard let touch = touches.first else { return } let touchLocation = touch.location(in: self) // ネズミとタッチの位置の距離を計算 let distance = hypot(mouseNode.position.x - touchLocation.x, mouseNode.position.y - touchLocation.y) if distance < 50 { // ネズミの近くをタッチした場合 moveMouseRandomly() } } func moveMouseRandomly() { let safeAreaInsets = view?.safeAreaInsets ?? UIEdgeInsets.zero let minX = safeAreaInsets.left - size.width / 2 let maxX = size.width / 2 - safeAreaInsets.right let minY = safeAreaInsets.bottom - size.height / 2 let maxY = size.height / 2 - safeAreaInsets.top let randomX = CGFloat.random(in: minX...maxX) let randomY = CGFloat.random(in: minY...maxY) let moveAction = SKAction.move(to: CGPoint(x: randomX, y: randomY), duration: 0.5) mouseNode.run(moveAction) } }
お知らせ
ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!