スポンサーリンクレクタングル(大)広告レバー操作でコインをはじく今回は10円ゲームのキモ、レバー操作の実装です。レバーを引いて離すと、引いた分に応じて力強くコインをはじきます。レバー操作の実現方法ドラッグ処理でレバーのはじく強さを実現します。レバーをタッチすることでレバー操作を開始、ドラッグすることでレバーの力強さを決定します。タッチを離した時にコインをはじく処理を行います。ドラッグ中はレバーをアニメーションさせます。使用する画像はこちら。lever.pnglever_background.pngレバーは、スティック部分とレバー背景の穴の画像を使います。画像が用意できたら実装していきます。レバーははじく際にアニメーションさせるので、メンバ変数にします。その他タッチした際に使用する変数も定義しておきます。タッチしたポイント};変数の初期化処理です。0.0f);特に変わったことはしていません。2);}いつも通りSpriteクラスを使って画像を描画しているだけですが、1点だけポイントがあります。それがsetAnchorPoint()です。setAnchorPoint()は画像の基準となる点で、回転させる際に軸となる点にもなります。0.28f)を設定しています。タッチイベントを受け取って、レバーをアニメーションさせるレバーにタッチ処理を使うので、タッチイベントを受け取れるようにします。実際の操作と対応しているので、イメージしやすく直感的に理解できると思います。シーンでタッチイベントを受け取るには、タッチイベントのクラスメソッドを定義します。event);};タッチイベントを受け取るためのリスナーイベントを登録します。this);これでこのシーンでタッチイベントを受け取れるようになりました。レバーのタッチ処理を実装します。false;}}レバーをタッチしたかどうかを判定するには、レバーの矩形とタッチした点の衝突判定の結果を調査します。レバー画像へのタッチ判定onTouchBegan()がタッチ開始時に呼ばれるイベントのため、onTouchBegan()でレバーがタッチされたかどうかを判定しています。touch->getLocation()でタッチした点を取得できます。レバー画像側はSpriteクラスのgetBoundingBox()で画像の矩形領域が取得できるため、この矩形領域とタッチした点で衝突判定を行います。矩形領域と点の衝突判定には、矩形領域のクラスであるRectクラスのメソッドcontainsPoint()で判定することができます。レバードラッグ時のアニメーション(回転)対応onTouchMoved()はドラッグ動作に対してのイベントです。onTouchMoved()でレバーのアニメーションを行い、レバーの引く処理を視覚的に表示しています。タッチを開始した点から、距離が離れるほどレバーを倒す(回転)する処理を入れます。画像の回転処理は、SpriteクラスのメソッドsetRotation()で回転できます。タッチを離した時onTouchEnded()はタッチ終了時のイベントです。解りづらいですが、レバーがドラッグ処理で傾いています。動画レバーのタッチ操作でコインをはじくタッチイベントを利用してレバー操作が実現できました。次はタッチを離した際にコインをはじく処理を実装します。Impulse)で剛体(コイン)に対して瞬間的に力を加えることができます。タッチを離した際に呼ばれるoneTouchEnded()にコインに力を加える処理を追加します。false;}}レバーを動作させた際に、コインに逆方向への力を加えて動かします。実際の10円ゲームは、レバーとハンマー機構によりコインを叩くわけですが、今回は擬似的に実装しています。ハンマー機構を作っても面白いですが、物理で動く部分が増えるとコインをはじく結果への不安定さが増えることになり、ゲームとして面白くなるか、運ゲーになるか微妙なところなので擬似的な方を採用しました。実行結果レバーの領域を表示しています。この範囲にコインがあれば、レバー処理でコインに力を加える処理が働きます。動画ここまでのソースコードはこちら次回ははずれ穴とゴールの処理の追加です。エンディングを作るクレーンゲーム製作記、最後はエンディング画面についてです。第5回、画像(スプライト)を表示してみます。第13回、デモ画面を実装します。