無事後編がはじまりましたね。
なぜ「無事?」という方は前編からご覧いただくことをオススメします。
ドムドムその10:かんたんフリックの作り方(前編)
さてさて、
いよいよかんたんフリック作りに入るわけですが、
はじめるまえに基本的な考え方をお話ししましょう。
前回作ったボタンボール。
これはアクションのつなぎ方次第で、様々な状態をキャッチすることができます。
———————–
Touch Down : 文字通りタッチした瞬間をキャッチ。「今押されましたよ!」
Touch Down Repeat : 連射した時の2回目以降をキャッチ、ダブルクリックみたいなもの
この辺はわかりやすいですね。
Touch Up Inside : 指を離した瞬間をキャッチ。「今離れましたよ!」
Touch Up Outside : 指を離した瞬間をキャッチ、ただしオブジェクトの外で
Touch Drag Inside : 指をドラッグした瞬間をキャッチ。「ドラッグされてます!」
Touch Drag Outside : 指をドラッグした瞬間をキャッチ、ただしオブジェクトの外で
補足1
Dragに関しては、指をすーっと動かした時に1回起こるわけではなく、
動かしている間中細かく Drag Drag Drag Dragと起こっていきます。
補足2
Outsideが若干わかりにくいのですが、ボタンボールの場合で言うと、
・最初にTouch Downで触る
・そのまま指をドラッグして、ボールから指がハミ出る
→Outsideになる
ということです。
離せばUp、ドラッグし続けるとDragになります。
最初からこういう状態になるわけではなく、結果としてそういう状態になってしまうわけです。
Touch Drag Exit : ドラッグしてボールの外に指が出た瞬間をキャッチ
Touch Drag Enter : ドラッグしてボールの中に指が戻ってきた瞬間をキャッチ
これもドラッグ中の特定の状態のキャッチですね。
ボタンボールを置いておいて指をズリズリ動かしていると、
様々な状態がめまぐるしく変わっていることになります。
———————–
で、今回のかんたんフリックは何を使うのか、ということなのですが。
Touch Drag Insideを使います。
「ボールの上に指が触れて、素早く動かされた時に、ボールをそっち方向に弾く」
というフリックの動きを、
「ボールの上を指がドラッグしたときに、ドラッグ前と後の指の位置を押さえておいて、
その移動距離を速度に変換してボールに与える」
という形に意訳するわけです。
見た方が簡単なので、まずはこちらのコードを追記してください。
domdomViewController.h
<クリックで拡大>
前回分もシレっと書いていますが、
今回のポイントはdragBallというアクションメソッドです。
後で使うので、vxTemp, vyTempという2つの変数も書いておいてください。
domdomViewController.m
<クリックで拡大>
そしてメソッドの中身はこちら。
-(IBAction)dragBall{
vx2 = posX2 – vxTemp;
vy2 = posY2 – vyTemp;
vxTemp = posX2;
vyTemp = posY2;
}
コレだけです。
え?もう少し説明要ります?やっぱり?
-(IBAction)dragBall{
// vx2(x方向への速度) = posX2(X座標の現在位置)- vxTemp(1ドラッグ前のX座標の位置)
vx2 = posX2 – vxTemp;
// vy2(y方向への速度) = posY2(Y座標の現在位置)- vyTemp(1ドラッグ前のY座標の位置)
vy2 = posY2 – vyTemp;
// vxTempに現在位置posX2を代入
vxTemp = posX2;
// vyTempに現在位置posY2を代入
vyTemp = posY2;
}
ドラッグしてる間中、この計算を繰り返し続けます。
指が離れた瞬間にボールは速度vx2,vy2に従って動き出しますので、
結果的にボールが弾かれるわけです。
ぽーんと。
ホントかよ?という方。
ボールをアクションと接続してもらって。
心ゆくまでお試しください。
勘のいい方ならお気付きかと思いますが、
・vxTemp,vyTempの初期化はどうすんの?
・Touch Up InsideとかTouch Up Outsideとか、指が離れた瞬間に計算したが良いんじゃないの?
・Touch Downを上手く使えないの?
・っていうかしばらく遊んでると動きがぎこちなくなるんだけど
この辺が、かんたんフリックのパチモノたる所以でございます。
もっと精度の高いコントロールは追って書かせていただきますので、
まずは自在にボールを操る感覚をお楽しみください。
かんたんって最高!