質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

876閲覧

[swift] touchesMovedが呼び出せない

tein

総合スコア5

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/01/14 05:43

前提・実現したいこと

現在、動物タワーバトルのようなゲームを作っています。
下の地面に接触をしたら画像が複製されるのですが、複製されたものがtouchesMovedやtouchesEndedの影響を受けないのです。
どのようにすればいいでしょうか。

発生している問題・エラーメッセージ

複製されたものにtochesMovedやtochesEndedが効かない

該当のソースコード

swift

1// 2// GameScene.swift 3// mi-mo 4// 5// Created by student on 2019/12/03. 6// Copyright © 2019年 user. All rights reserved. 7// 8 9import Foundation 10import SpriteKit 11import GameplayKit 12// #A→SKPhysicsContactDelegate 13class GameScene: SKScene,SKPhysicsContactDelegate { 14 private enum GameState { 15 case Playing 16 case GameOver // ゲームオーバー 17 case WaitToRestartFromLose // ゲームオーバーからのリスタート待ち 18 } 19 // オブジェクト群 20 var background = SKSpriteNode(imageNamed: "haikei") 21 var jimen = SKSpriteNode(imageNamed: "jimen") 22 var over = SKSpriteNode(imageNamed: "over") 23 var gameOverTitle = SKSpriteNode(imageNamed: "aisatu") 24 var mimo = SKSpriteNode() 25 var a = 0 26 private var gameState = GameState.Playing 27 //ミーモのノードを作成する。 28 //let tabi = SKSpriteNode(imageNamed: "tabi") 29 30 override func didMove(to view: SKView) { 31 32 // #B→self.physicsWorld.gravityとself.physicsWorld.contactDelegate 33 // 重力の設定 34 self.physicsWorld.gravity = CGVector(dx:0,dy:-3.0) 35 // 衝突の後にdidBeginContactメソッドが呼ばれるよ!の設定 36 self.physicsWorld.contactDelegate = self 37 38 // 背景画像の設定 39 // background.anchorPoint = CGPoint(x:0,y:0) 40 background.position = CGPoint(x:0,y:0) 41 background.size = self.size 42 self.addChild(background) 43 // ゲームオーバー用タイトルをセットアップする 44 gameOverTitle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5) // シーン中央に配置する 45 gameOverTitle.zPosition = 200 46 // jimenの配置 47 jimen.position = CGPoint(x:0,y:-700) 48 jimen.size = CGSize(width: 500, height: 100) 49 jimen.physicsBody = SKPhysicsBody(rectangleOf: jimen.frame.size) 50 //重力を無効にする 51 jimen.physicsBody?.affectedByGravity = false 52 //overの設置 53 over.position = CGPoint(x:0,y:-1000) 54 over.size = CGSize(width: 800, height: 100) 55 over.physicsBody = SKPhysicsBody(rectangleOf: over.frame.size) 56 //重力を無効にする 57 over.physicsBody?.affectedByGravity = false 58 //カテゴリ 59 // jimen.physicsBody?.categoryBitMask = 0x1 << 0 60 //衝突 61 // jimen.physicsBody?.collisionBitMask = 0x1 << 2 62 self.addChild(jimen) 63 self.addChild(over) 64 65 // #C→block.physicsBody 66 67 // 岩石の配置 68 let names = ["tabi","aisatu","nougu","den"] 69 let index = Int(arc4random_uniform(UInt32(names.count))) 70 let name = names[index] 71 mimo = SKSpriteNode(imageNamed: name) 72 mimo.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "mimo"), size: mimo.self.size) 73 mimo.size = CGSize(width:150,height:150) 74 mimo.physicsBody?.contactTestBitMask = 1 75 mimo.position = CGPoint(x:0,y:600) 76 mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) 77 //カテゴリ 78 // mimo.physicsBody?.categoryBitMask = 0x1 << 1 79 //衝突 80 //mimo.physicsBody?.collisionBitMask = 0x1 << 0 81 //重力を無効にする 82 mimo.physicsBody?.affectedByGravity = false 83 //衝突判定 84 mimo.physicsBody?.categoryBitMask = 0b0010 85 jimen.physicsBody?.categoryBitMask = 0b0001 86 over.physicsBody?.categoryBitMask = 0b0001 87 mimo.physicsBody?.collisionBitMask = 0b0001 88 jimen.physicsBody?.collisionBitMask = 0b0001 89 over.physicsBody?.collisionBitMask = 0b0001 90 jimen.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 91 over.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 92 self.addChild(mimo) 93 } 94 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 95 96 } 97 //画面タッチ移動時の呼び出しメソッド 98 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 99 100 //タッチした座標を取得する。 101 let location = touches.first!.location(in: self) 102 103 //タッチした位置まで移動するアクションを作成する。 104 mimo.run(SKAction.moveTo(x: location.x, duration: 0.0)) 105 106 107 108 } 109 110 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 111 let location = touches.first!.location(in: self) 112 let node = atPoint(location) as! SKSpriteNode 113 114 if(node.physicsBody != nil) { 115 //タッチしたノードを落とす。 116 node.physicsBody!.isDynamic = true 117 //重力を有効にする 118 mimo.physicsBody?.affectedByGravity = true 119 //タッチイベントを無効にする 120 UIApplication.shared.beginIgnoringInteractionEvents() 121 } 122 //Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(GameScene.timerUpdate), userInfo: nil, repeats: true) 123 124 } 125 func didBegin(_ contact: SKPhysicsContact){ 126 // var firstBody:SKPhysicsBody 127 // var secondBody:SKPhysicsBody 128     //ここで複製 129 if(contact.bodyA.categoryBitMask == jimen.physicsBody?.categoryBitMask){ 130 run(SKAction.sequence([ 131 SKAction.wait(forDuration: 0.0)])) 132 if(a == 0){ 133 134 let names = ["tabi","aisatu","nougu","den"] 135 let index = Int(arc4random_uniform(UInt32(names.count))) 136 let name = names[index] 137 mimo = SKSpriteNode(imageNamed: name) 138 mimo.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "mimo"), size: mimo.self.size) 139 mimo.size = CGSize(width:150,height:150) 140 mimo.physicsBody?.contactTestBitMask = 1 141 mimo.position = CGPoint(x:0,y:600) 142 mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) 143 //重力を無効にする 144 mimo.physicsBody?.affectedByGravity = false 145 //衝突判定 146 mimo.physicsBody?.categoryBitMask = 0b0010 147 mimo.physicsBody?.collisionBitMask = 0b0001 148 jimen.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 149 over.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 150 self.addChild(mimo) 151 a = 1 152 } 153 } 154 if (contact.bodyA.categoryBitMask == over.physicsBody?.categoryBitMask){ 155 gameState = .WaitToRestartFromLose // ゲームの状態をゲームオーバーにする 156 }else{ 157 158 } 159 // if (gameState != .Playing) { 160 // return 161 // } 162 163 164 //run(SKAction.sequence([SKAction.run { 165 // self.gameState = .WaitToRestartFromLose 166 // self.addChild(self.gameOverTitle) 167 // }, 168 // ])) 169 // restart() 170 //} 171 // firstBody = contact.bodyA 172 // secondBody = contact.bodyB 173 174 } 175 // ゲームの状態がプレイ中でなければ処理を抜ける 176 // ゲームリスタートを処理するメソッド 177 //private func restart() { 178 // ゲームの状態がリスタート待ちでなければ処理を抜ける 179 // if (gameState != .WaitToRestartFromLose) { 180 // return 181 // } 182} 183 184 185 186 187

補足情報(FW/ツールのバージョンなど)

version9.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問