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

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

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

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

Xcode

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

Swift

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

解決済

モグラたたきゲームで3種類のモグラをランダムに表示したい

nimoe
nimoe

総合スコア1

SpriteKit

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

Xcode

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

Swift

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

1回答

0評価

1クリップ

1205閲覧

投稿2021/01/21 12:25

前提・実現したいこと

プログラミング初心者です。
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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SpriteKit

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

Xcode

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

Swift

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