CS;GOにはまっている
最近_Counter-Strike: Global Offensive(以後 CS;GO)というゲームにドはまりしてます。_
28h/week って中々だと思います。一日四時間も費やしてしまっています。
何より僕のPCで80FPS以上出るゲームがこれぐらいなのです。
空から30万降ってきてくれればPUBGやBFに移行するかもしれません。
でも知らない外国人とワイワイ/ギスギス VCでプレイできるのはこれぐらいな気もするのでやっぱり続けるかもしれません。
後このゲームでフレンドが五人も増えてたまにランクマッチ一緒にやったりしてます。(五人の内一人は詐欺師でしたが)
文字稼ぎもほどほどにしてそろそろ本題に移っていきたいと思います。
このCS;GOでデコイグレネードという武器があるんですよ。
※デコイグレネード
硬貨をwikiから引用しますと
プレイヤーがそこに居るかのように、偽の発砲音を鳴らす。
引用元はwikiより
・・・これってアプリで作れそうじゃないですか?
しかもこのアイテム(ゲーム内マネーで)$50もするんですよ
もしアプリで出来れば回収も出来ますし$50を節約できますよね!
という事でゲーム中のテロリスト/カウンターテロリスト向けで開発に取り掛かりました(笑)。
デコイグレネードを使用した動画がありましたのでここにて紹介
このように持っている武器と同じ発砲音がデコイグレネードから鳴ります。
デコイグレネードは鳴りおわった後に爆発してダメージを与えられるのですが流石にAndroidを爆発させる訳にはいかないのでその再現は なし にします(笑)
今回とりあえず
Androidから音を鳴らす事を主目的として作成していきました。
とりあえず先にアプリの起動画面、軽い説明、URLを貼ってから詳しい説明に入りたいと思います。
一番左が初期画面です。起動時はこの画面になります。
選択してくださいの下にある以下にも開きそうな奴はスピナーって名前です。このスピナーを押した状態が二枚目です。
選択すると三枚目の画像になりボタンを押すと5秒のカウントダウンが始まってから銃声がなります。
銃声が鳴るタイミングはある程度ランダムにしています。この部分は解説/感想の部分で詳しく説明したいと思います。
今回音を鳴らす機能を使用するにあたって、API20(Android 4.4)以下に対応する手順が理解出来なかったので比較的簡単となる要求API21(Android 5.0)以上で出来るプログラムを使ってしまいましたので、たぶん最低APIは21以上になっています・・・(Android 5.0以上必須・・・のはず)
普段テストに使う端末がAndroid 4.4.2のAPI19なので今回はテスト端末としてKindleFire (2015)を用いました。
KindleFireのOSは一応Fire OSという名前ですがベースがAndroid OSのためこのようにテスト端末としても利用ができます(設定が少しめんどくさいですが)
たまたま持っていたKindle Fire(2015)はAndroid 5.1(API22)ベースのOSを改良したFire OSが入っていたので
API22のAndroid機としてテスト出来ました。
余談ですが、Kindleは似た名前のが多いのでググる時はKFFOWIというモデル番号使ったほうがわかりやすい気がします。
とりあえずダウンロードはここからです。
正直GooglePlayに登録してからが本番だと思ってます。
https://github.com/reud/DecoyGrenade32/commit/1f2ea85ee3607f4efbef7223212e729b7d1778c0
コードはここに書いてありますMainActivty.javaを見て下さい
音のロードなどはSoundPool を使っています。また.build()が36,40行にあります。
.build()を使ってSoundPoolを作れるのはAPI21からなのでここの部分のせいで要求レベルが上がってしまっています。プルリクエストください(丸投げ)
後ボタンがクリックされると56行目のonClickButtonが発動しtimerが5000msの間、1000msインターバルでカウントされます。簡単にいうと五秒タイマーが起動するってことです。
timerの処理が107行目にあります。ここではタイマーが終了したとき113行目のonFinishが作動し、新たなタイマーrandomShooterが起動します。
randomShooterの引数がすごいことになってますがこれはタイマーの時間とインターバルをいい感じのランダムにしているだけです。
randomShooterというタイマーが起動している間のインターバルに銃声がなります。
onTickがインターバルの部分です。
ここでrandomShooterが終了したとき再度timerを1001msカウントの1000msインターバルでカウントさせ
再帰っぽい事をやってます。(timerがrandomShooterを呼び出す→randomShooterがtimerを呼び出す→timerがrandomShooterを呼び出す→…)
ただ、timerが起動している時は無音なので出来るだけtimerの起動時間を減らしたいのですがtimerの起動時間を1000ms以上にしないと三回ループもせずに何故か途中で落ちます。
テスト環境ではgithubに上げたコードで5回ループまでいってフリーズしました。
改善策が分からなかったので「永遠に打てる弾なんてないしちょうどいいな」って事にしましたが、改善策あったら教えてください。
スピナー、効果音鳴らす、タイマー全て初めて使ったので大分時間がかかってしまいました。
そろそろ暇つぶしになりそうなゲームアプリを作ってみたいなと思います。
2400文字にもなる読みにくい長文を読んでいただきありがとうございました。