わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

androidでシューティングゲームの基本実装を描いてみた

急に思い立ってandroidで機体と玉を飛ばすアニメーションを描いてみていた

なぜかandroidcanvasシューティングゲームってどうやって作るんだろうと急に思い立って、試しに機体と玉を飛ばす実装を進めていた。androidは自分が大学生のときに一回(当時はまだ2系)と今の会社の先輩が講義をしてくれた2回があるが、今まで結局一度もストアに出したことはない。

2回目も一昨年の冬だったので、だいぶ忘れていた。今回、どんなふうに進めていたか手順を残す。

とりあえずアプリを立ち上げる

developer.android.com

まずAndroid Studioを手に入れないことにはどうしようもないが、手に入れるためのリンクもここに記載されてるのでとりあえずここから。
次のレッスンに進むと実機で立ち上げたりエミュレータで立ち上げる方法とかが書いてあるから一通り触ってみた。
昔はKotlinのサンプルがなかったけど、いつの間にかできてた。コードの雰囲気はここで知れる。

KotlinとJavaの違いを知る

qiita.com

Javaで開発はしたことがあったので、雰囲気でKotlinも触ってみるかと思ったら案外詰まった。なのでKotlinとJavaの違いをざっくり知るために検索したら、このページがヒットした。2回目の講義のときも「基本はJavaだからJavaでちゃんと仕組みを理解したほうがいいんじゃないか」と言われていたんだが、今回はKotlinで初めから書くことにした。

canvasで絵を描いてみる

developer.android.com

ここにあるサンプルコードを素直に実装した。楕円が表示される。矩形の表示もちょっとの変更で実装できる。

canvasで描いた絵を動かしてみる

akira-watson.com

このサイトの一番最初のサンプルコードを素直に実装した。四角が目標地点に落ちていくだけの実装だが、確かに動く。ただしサンプルコードはJavaなのでKotlinに読み替えた。一番最初はまだクラスが直接MainActivityに依存していて、自分の中で気持ち悪かったのでViewをMainActivityから分けたり、最初の位置が動くように修正したりしてみた。

canvasのタッチしたところに絵を表示させる

techbooster.org

最初はここにあるようにActivityのonTouchEventをoverrideして実装しようとしたが、実際にはViewのタッチイベントを描画させる絵に伝播させたかったので

qiita.com

こっちを参考にView側でタッチイベントを取るようにした。Activityでイベントを取るかViewでイベントを取るかはケースバイケースだと思うが、どちらでもイベント自体の取得は可能だった。

canvasの任意の場所に機体を表示させ、そこから玉が飛ぶように実装する

これまでの応用として機体を「タッチしたところに表示させ」、そこから玉を「描いて」「動かして」みれば良い。とはいえ、2つの絵を描くところは新要素にはなる。これでおおよそやりたいことは達成できる。

f:id:kimikimi714:20190916233907g:plain
シューティングのデモ

サンプル実装のリポジトリを以下に載せる。

github.com

本当はベクター図形ではなくて任意の画像を機体と玉に見立てて実装するところまでやりたかったが、今回は画像の選定が面倒でやめた。玉に加速度が着いちゃってるので、等速直線運動にしたいなとかいろいろ思うところはある。あとgitはrebaseとか面倒でろくにやってない。

気が向いたら、この続きを作ろうと思う。あとちゃんとテスト書きたい。