2014TweetPocketスマホアプリといえばゲーム!ゲームの古典スカッシュゲームを作ってみました。ここからブロック崩しやインベーダーゲームに発展させるのはお決まりですね。Technologyが選択できます。今回は2Dで物体間の反発もあるので、SpriteKitを使います。Xcodeを立ちあげて、iOS->Application->Gameを選択します。TechnologyはSpriteKitです。Devicesは何でもいいです。サンプルプログラムがありますので、そのまま実行できます。サンプルを堪能したら不要な部分を消していきます。Images.xcassetsのSpaceshipはサンプルプログラム用の画像なので削除します。GameScene.swiftには3つの関数(didMoveToView、touchesBegan、update)がありますが、関数の中身を全部削除します。inspectorのColorを黒に、SizeをW:640、H:1136とiPhone6の大きさにしておきます。基本的にはGameScene.swiftを実装すればいいです。グローバルに変数を準備。使用できるようになります。画面全体(frame)とラケットとボールにSKPhysicsBodyを登録します。ラケットは当たっても動いたりしない(物理演算を使用しない)ので、dynamicにfalseを割り当てます。addBall()ボールは動くのですが、重力の影響は今回は無視するので、affectedByGravityをfalseにします。反発時にエネルギーを失わないように、restitutionを1.0にします。空気抵抗(linearDamping)と摩擦(friction)も無視するようにします。}ボールには重力の影響を受けない代わりに、初速を与えます。最初にランダムに飛ぶようにしています。-1ここまで来たらボールが壁にぶつかったり、ラケットにぶつかったりしながら、ぴょんぴょん飛び跳ねます。ラケットを動かせるようにしましょう。iOSデバイスなので傾けて動かしたいところですが、今回はシミュレータを使いながらやりたいので、タッチで動かすことにします。タッチした位置に向かって、一定のスピードで動くようになります。}これでボールが飛び跳ねながらラケットで返せるようになります。ラケットの後ろにボールが飛んだ場合は、跳ね返らずボールをロストさせないといけません。この関数は物理演算等で画面に変化を加えた後に呼ばれます。ボールがラケットの後ろに飛んだときに破裂する効果も入れてみましょう。プログラムを書く前に破裂する効果画像を用意します。Fileを選択します。templateはSparkを選んで、sparkという名前で保存します。spark.sksとspark.pngが追加されます。ボールがラケットの後ろに行ったら、このsparkのNodeをボールの位置に追加して、fadeoutして削除する処理をSKActionを使って実行すればOKです。ボールもremoveFromParent関数を使って削除しましょう。}これだけだと寂しいので、点数をつけます。点数は継続時間にします。0.1秒毎に1点です。SKLabelNodeを使って、点数表示の準備をします。}update関数を使用して、定期的に点数を更新します。}ボールがすべてロストしたら、タッチで再開させるようにしましょう。{これでほぼ完成ですが、やってみると、ボール同士の衝突等でボールの速度が極端に遅くなったり、Y軸方向の速度が0になり延々とX軸方向に動き続けたりします。この補正をdidSimulatePhysics関数の中でやっておきましょう。X方向が遅くなったら、Y方向を少し遅くして、速度がballSpeedになるように、X方向の速度を再計算しています。SpriteKitを使うと、速度や重力、衝突が簡単に処理できます。Nodeを増やして、衝突判定をしてけば、どんどん複雑なゲームが書けるようになりますね。