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

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

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

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

1701閲覧

画面遷移後のUIGestureRecognizerが反応しません。

moooooooolch

総合スコア13

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2016/12/02 01:35

編集2022/01/12 10:55

###概要
Swift3,Xcode8,SpriteKitを使用してパズルゲームのようなものを作っています。
ストーリーボードで設定したUIGestureRecognizerをGameViewControllerに適応し、ドラッグアンドドロップでブロックを動かせるようにしています。
ブロックを揃えて消し、制限時間内のスコアを競います。
時間制限が過ぎたら、画面の操作を中止し、TimeUpとハイスコアをラベルで表示し、リトライボタンを設置します。
リトライボタンを押された場合、presentSceneでそのシーン自身に遷移させることでゲーム開始時の状態に戻しています。

###発生している問題
リトライボタンを押した際、画面はゲーム開始時の状態に戻りますが、UIGestureRecognizerが反応しなくなり、ドラッグアンドドロップができない状態になります。

遷移後もドラッグアンドドロップできる状態にするにはどうしたらよいのでしょうか。

GameViewController

var panPointReference: CGPoint? @IBAction func didPan(_ sender: UIPanGestureRecognizer) { if scene.status == "wait"{ scene.timerStart() } if scene.timeLimit == 0 { return } let currentPoint = sender.translation(in: self.view) if panPointReference != nil { // print("currentPoint: \(currentPoint)") scene.moving(p:currentPoint) } else if sender.state == .began { // print(".Began") panPointReference = currentPoint } if sender.state == .ended { // print(".Ended") panPointReference = nil scene.movingEnd(vector: scene.vector) scene.vector = "" } }

GameScene

func timeUp(){ status = "timeUp" timer.invalidate() let retryButton = Button(text: "retry?", rect: CGRect(x:200,y:40,width:100,height:30), afterTap:{[weak self] in let scene = GameScene(size: (self?.scene!.size)!) scene.status = "wait" self?.isPaused = false scene.scaleMode = .resizeFill self?.view?.presentScene(scene) }) addChild(retryButton) }

ButtonClass

class Button: SKSpriteNode { let afterTap:() ->() init (text: String,rect: CGRect, afterTap: @escaping () -> ()) { self.afterTap = afterTap super.init(texture: nil, color: UIColor.clear, size: rect.size) position = rect.origin isUserInteractionEnabled = true let rectplus = SKShapeNode(rect: CGRect(origin: CGPoint(), size:rect.size),cornerRadius:4.0) rectplus.fillColor = UIColor.clear rectplus.strokeColor = UIColor.clear addChild(rectplus) let pluslabel = SKLabelNode(fontNamed: "MarkerFelt-Thin") pluslabel.text = text pluslabel.fontSize = CGFloat(30) pluslabel.fontColor = UIColor.black pluslabel.position = CGPoint(x:rect.width / 2, y: rect.height / 2 - pluslabel.frame.height / 2) pluslabel.zPosition = 7 addChild(pluslabel) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func touchesEnded(_ touches:Set<UITouch>,with event:UIEvent?){ afterTap() } }

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

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

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

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

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

fuzzball

2016/12/02 02:00 編集

UIGestureRecognizerの設定を変更している箇所があれば書いて下さい。「そのシーン自身に遷移」を具体的に書いて下さい。(こんな感じ? skView.presentScene(skView.scene))
moooooooolch

2016/12/02 02:21

必要そうなコードを追加しました。
fuzzball

2016/12/02 02:25

didPan()が呼ばれているかどうかチェックして下さい。
moooooooolch

2016/12/02 02:27

  print(".Began") が呼び出されていないことを確認しました。
fuzzball

2016/12/02 02:32 編集

そうではなくて、didPan()の先頭にprint文を追加して確認して下さい。(ブレークポイントでもいいです)
moooooooolch

2016/12/02 02:34

失礼しました。その方法ではprintが呼び出されました。
moooooooolch

2016/12/02 02:39

その箇所で、print(scene.timeUp)をチェックしたところ、0になっていて、それによってreturnが返されていたようです。解決しました。アドバイスありがとうございました。
fuzzball

2016/12/02 04:51

ご自身で回答を作成し、質問をクローズして下さい。
guest

回答1

0

どこかで無効にして、そのままになっているのではないでしょうか?

swift

1gesture.isEnabled = false 2//とか 3self.view.isUserInteractionEnabled = false

投稿2016/12/02 02:06

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問