2023年11月 Android Studio Giraffe | 2022.3.1 で動作確認済み。
ここまでの記事はこちら
今回はこのゲームの総仕上げです!
ここまで Nexus4 のエミュレーターを使って開発してきましたが、他の画面サイズでもゲームを楽しめるように、ボックスとボールの動くスピードを調整していきます。
解説 1. 速度の計算方法 機種や画面サイズによって値を変えるには、デバイスの解像度によって定数ファイルを作成するなどいくつか方法があります。
今回は「スクリーンサイズをもとに計算する方法」 で実装します。
この方法だと新しくファイルを用意したり、細かい機種分けも考える必要がないのでオススメです。
現在は Nexus4 で開発しているので、ボックスとボールの動くスピードは
ボックス 20
オレンジボール 12
ピンクボール 20
黒いトゲトゲ 16
になっています。
これを既に取得してある screenWidth と screenHeight をもとに計算 していきます。
2. 速度を計算する MainActivity.java を開いて、5~8行目を追加します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private float blackX;
private float blackY;
// スピード
private int boxSpeed;
private int orangeSpeed;
private int pinkSpeed;
private int blackSpeed;
// Score
private int score = 0;
View the code on Gist .
4~7行目を追加します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
screenWidth = size.x;
screenHeight = size.y;
boxSpeed = Math.round(screenHeight / 60f);
orangeSpeed = Math.round(screenWidth / 60f);
pinkSpeed = Math.round(screenWidth / 36f);
blackSpeed = Math.round(screenWidth / 45f);
orange.setX(-80.0f);
orange.setY(-80.0f);
View the code on Gist .
Nexus4, Nexus5, Nexus6 のそれぞれの速度の計算結果は以下のようになります。
細かい機種の画面サイズを調べるにはこちら のサイトが便利です。
3. 速度をセットする 6・15・24・34・36行目を変更します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void changePos() {
hitCheck();
// Orange
orangeX -= orangeSpeed;
if (orangeX < 0) {
orangeX = screenWidth + 20;
orangeY = (float)Math.floor(Math.random() * (frameHeight - orange.getHeight()));
}
orange.setX(orangeX);
orange.setY(orangeY);
// Black
blackX -= blackSpeed;
if (blackX < 0) {
blackX = screenWidth + 10;
blackY = (float)Math.floor(Math.random() * (frameHeight - black.getHeight()));
}
black.setX(blackX);
black.setY(blackY);
// Pink
pinkX -= pinkSpeed;
if (pinkX < 0) {
pinkX = screenWidth + 5000;
pinkY = (float)Math.floor(Math.random() * (frameHeight - pink.getHeight()));
}
pink.setX(pinkX);
pink.setY(pinkY);
// Box
if (action_flg) {
boxY -= boxSpeed;
} else {
boxY += boxSpeed;
}
View the code on Gist .
4. アプリを実行 アプリを複数のエミュレーターで実行してみてください。
動画では Nexus4, Nexus5, Nexus6 でテストしました。
まとめ お疲れ様でした、以上で完成です!
たくさんコードを書いてきましたが「絶対にこう書かなくてはいけない」という箇所はありません。
何通りもの実装方法があるのもプログラミングの楽しさです。ぜひご自身でアレンジして、オリジナルのゲームアプリを作ってみてくださいね。
そしてオリジナルゲームをリリースした時は、ぜひお知らせください!「こんなゲーム作れたよ」というご報告を頂けるのは本当に嬉しいのですぐチェックしに参ります。
補足:Warning の解消方法 Warning の解消方法を追加しました。
そのままにしておいても今のところプログラム自体に影響はないので、気になる方だけ進めてみてください。
ABOUT ME
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
COMMENT
投稿いただいたコメントは管理者の承認後に表示されます。
コードやエラーに関するご質問の場合は、以下の3点
をできるだけ具体的に必ず書いてください。
無事ここまでたどりつけました!
最後までたのしくできて、また勉強になりました!
ありがとうございました ^^
当サイトを見つけて頂きありがとうございます
最後まで楽しんで頂けたとお聞きして、とても嬉しいです。
完成おめでとうございます!