試行錯誤 10.3 (ちょっとシュッと(未完成)・ジグソーパズル)
前回の記事で
>特にピースが正解座標の±10の範囲に入る所のif文って.....φ(T▽T)煙煙煙
>もっとシュッとしたプログラムが書けるようになりたいな〜と思います。
と嘆いていましたら、アプリ道場のToshiさんよりアドバイスをいただきました。
どうしたらコードがシュッとするかな?たとえば、ピースの中心に10x10のUIViewを置いて、CGRectContainsPointで正解のポイントにはいったかどうかを判定する、とか?
— とし☆あずきちゃんと虹色クレヨン出版 (@toshi586014) 2015, 11月 21
こんなごっちゃりコードを見ていただき、本当にありがとうございますm(T T)m
エリアで判定、1次元から2次元にワープです!•̀ω•́ ✧
早速作ってみました。
が...
1. 作るタイミングで試行錯誤
ピースを作る時点でエリアをピースに乗っけてやろうとしたのですが、ピースとエリアがうまく連動してくれません。
ここ、もう少しやってみますm(__;)m
2. エリアをどこに作るかで試行錯誤
ピース側に作ると、判定がうまくいきません。
ここも、もう少しやってみますm(__;)m
今の所、一応動いたやり方を書いてみます。
ドラッグしたピースを離す時に、ピースではなく台の方に15×15のエリアを作り、正解座標がその中に入ったら正解になるようにしてみました。
エリアは赤く色をつけています。
///ピースをドラッグしたら呼ばれる関数 func dragPieces(sender:UIPanGestureRecognizer){ //ピースをドラッグし終わったら if sender.state == UIGestureRecognizerState.Ended{ let targetImg:UIView = sender.view! //ドラッグしているピースの正解の中心x座標 let answer_x = 10+75*((targetImg.tag-1)%4)+75/2 //ドラッグしているピースの正解の中心y座標 let answer_y = 50+75*((targetImg.tag-1)/4)+75/2 //正解エリア let answerArea = UIView(frame: CGRectMake(0, 0, 15, 15)) answerArea.center = CGPointMake(CGFloat(answer_x), CGFloat(answer_y)) answerArea.backgroundColor = UIColor.redColor() self.view.addSubview(answerArea) //ピースの中心座標が正解エリアの中に入ったら正解とする if CGRectContainsPoint(answerArea.frame, targetImg.center){ //正解座標に移動 targetImg.center = CGPointMake(CGFloat(answer_x), CGFloat(answer_y)) //正解後は動かないように targetImg.userInteractionEnabled = false //正解数をカウント correctCount++ //全ピースが正解したら if correctCount == 16{ print("Congratulations!") } }
コードはちょっとすっきり^^
動かしてみます。
正解の判定は出ますが、このやり方だとピースを離すたびにエリアがaddSubviewされていってしまいますね。
「うーん、どこだろう?」
と迷えば迷うほど、赤いviewがどんどん積み上がっていく感じでしょうか^^;
もう少しやってみます〜m(__)m