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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

タッチパネル

タッチパネルとは、画面に指やペンで直接触れてコンピューターを操作する電子機器のことです。表示装置と入力装置の2つの機能を組み合わせたデバイスです。

Q&A

1回答

4557閲覧

SpriteKitでのタッチ判定について

oro

総合スコア6

SpriteKit

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

タッチパネル

タッチパネルとは、画面に指やペンで直接触れてコンピューターを操作する電子機器のことです。表示装置と入力装置の2つの機能を組み合わせたデバイスです。

0グッド

0クリップ

投稿2018/01/08 06:43

SpriteKitで動いている画像にタッチ判定をつけて,タッチされると表示されている文字が変化するようにしたいのですが,タッチ判定が出ません.touchesBeganに問題があるとは思うのですが,初心者ということもあり,どこが問題なのかすら分からない状況です.
いくつか調べてみたのですが,解決しなかったので投稿させていただきました.
以下にソースコードを貼ります.
よろしくお願い致します.

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
import SpriteKit
import GameplayKit

class GameScene: SKScene {

let msgLabel = SKLabelNode(fontNamed: "Chalkduster") var msg:String = "テスト" let myimage = SKSpriteNode(imageNamed: "22.JPG") let randomSource = GKARC4RandomSource() override func didMove(to view: SKView) { self.backgroundColor = UIColor.black msgLabel.text = msg msgLabel.fontSize = 36 msgLabel.position = CGPoint(x: 320, y: 1000) self.addChild(msgLabel) self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame) newmove() } func newmove() { let myimage = SKSpriteNode(imageNamed: "22.JPG") myimage.size = CGSize(width:200, height:200) let wx = randomSource.nextInt(upperBound: 440) + 100 let wy = randomSource.nextInt(upperBound: 200) + 800 myimage.position = CGPoint(x: wx, y: wy) myimage.physicsBody = SKPhysicsBody(circleOfRadius: 45) myimage.physicsBody?.velocity = CGVector(dx:20,dy:50) // 重力を無視する myimage.physicsBody?.affectedByGravity = false // 空気抵抗を無視する myimage.physicsBody?.linearDamping = 0 myimage.physicsBody?.restitution = 0.85 myimage.physicsBody?.friction = 0.2 self.addChild(myimage) } func touchDown(atPoint pos : CGPoint) { } func touchMoved(toPoint pos : CGPoint) { } func touchUp(atPoint pos : CGPoint) { } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { for touch in touches{ let location = touch.location(in: self) let touchNodes = self.nodes(at: location) for tnodes in touchNodes{ if tnodes == myimage{ msg = "狙い通り" msgLabel.text = msg } } } } override func update(_ currentTime: TimeInterval) { // Called before each frame is rendered }

}
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

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

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

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

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

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

guest

回答1

0

私も初心者なので上手に説明は出来ませんが・・
思い出しがてら回答させていただきます。
Nodeに名前を付けて判定させるのと for touch: AnyObject in touches
を追加してます。イメージ名とか座標など少し変えちゃいましたが
こんな感じでどうでしょうか・・

import SpriteKit import GameplayKit class GameScene: SKScene { let msgLabel = SKLabelNode(fontNamed: "Chalkduster") var msg:String = "テスト" var myimage = SKSpriteNode(imageNamed: "missile") let randomSource = GKARC4RandomSource() override func didMove(to view: SKView) { self.backgroundColor = UIColor.black msgLabel.text = msg msgLabel.fontSize = 36 msgLabel.position = CGPoint(x: 220, y: 200) self.addChild(msgLabel) self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame) newmove() } func newmove() { let myimage = SKSpriteNode(imageNamed: "missile") myimage.name = "myimage" myimage.size = CGSize(width:200, height:200) let wx = randomSource.nextInt(upperBound: 140) + 100 let wy = randomSource.nextInt(upperBound: 100) + 100 myimage.position = CGPoint(x: wx, y: wy) myimage.physicsBody = SKPhysicsBody(circleOfRadius: 45) myimage.physicsBody?.velocity = CGVector(dx:20,dy:50) // 重力を無視する myimage.physicsBody?.affectedByGravity = false // 空気抵抗を無視する myimage.physicsBody?.linearDamping = 0 myimage.physicsBody?.restitution = 0.85 myimage.physicsBody?.friction = 0.2 self.addChild(myimage) } func touchDown(atPoint pos : CGPoint) { } func touchMoved(toPoint pos : CGPoint) { } func touchUp(atPoint pos : CGPoint) { } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { for touch: AnyObject in touches { let location = touch.location(in: self) let touchedNode = self.atPoint(location) if let name = touchedNode.name { if name == "myimage" { msg = "狙い通り" msgLabel.text = msg } } } } override func update(_ currentTime: TimeInterval) { // Called before each frame is rendered } }

投稿2018/06/10 15:00

tanakana

総合スコア150

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問