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

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

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

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

Q&A

解決済

1回答

2568閲覧

Swift 2つの図形の当たり判定について

kuron

総合スコア10

Swift

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

0グッド

0クリップ

投稿2016/11/15 07:03

swift歴3ヶ月の初心者です。
現在ルーレットを作成しているのですがルーレットの扇型の図形と止まった場所を示す針との当たり判定に試行錯誤しています。インターネットにて様々な対応を試みたのですが解決出来なかったため投稿させていただきました。

swift

1//針 2 let needle = UIImageView() 3 needle.frame = CGRect(x:99, y:10, width:2, height:2) 4 needle.backgroundColor = UIColor.gray 5 6 checkpoint.addSubview(needle) 7 checkpoint.bringSubview(toFront: needle) 8 9//扇型の図形 10 var start: CGFloat = 0.0 11 for i in 0..<4 { 12 13 let end: CGFloat = start + ratios[i] 14 start = end 15 let path: UIBezierPath = UIBezierPath(); 16 17 path.move(to: CGPoint(x:chartCenter, y:chartCenter)) 18 path.addArc(withCenter: CGPoint(x:chartCenter, y:chartCenter), 19 radius: 100, 20 startAngle: start - CGFloat(M_PI) / 2.0, 21 endAngle: end - CGFloat(M_PI) / 2.0, 22 clockwise: true) 23 24 let sl: CAShapeLayer = CAShapeLayer() 25 sl.fillColor = type(of: self).color(num: i).cgColor 26 sl.path = path.cgPath 27 self.chart.layer.addSublayer(sl) 28 } 29 30//当たり判定 31 if needle.frame.intersects(chart.frame) { 32 print("Hit") 33 } else { 34 print("Not Hit") 35 }

おそらく、そもそもImageViewとShapeLayerの当たり判定を作ること自体が不可能と思うのですがこれといった手段が思いつくこともなく困っている状態です。
また今でしたら4種類の扇型をまとめて作成しているのですが一つ一つに当たり判定を分けたいとも考えています。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ルーレットのロジックを「図形と図形の当たり判定」だと考えてしまってはいけません。
ルーレットというのは「針の角度(0~360度、または0~2π)」という現在状態と「○度~○度なら○○が当たり」という判定条件だけで表現できるオブジェクトです。
それを扇形や針という図形で表現するのはあくまでユーザーの目に見せる最終段階の表現です。内部的な動作には扇形も針も出てこないのです。

だからルーレットが何に当たったかの判定は、「角度」がどの範囲にあるかを判定する不等式を条件にした4つのif文で記述することになります(もう少し応用編だと、if文よりも柔軟に当たり条件を記述する方法について考えていくことになりますが)。

投稿2016/11/15 07:15

yuba

総合スコア5568

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

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

kuron

2016/11/15 13:26

そういうことでしたか!ユーザー視点で考えていましたあくまで数式で考えなければいけないのですね!無事実装できましたありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問