質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

638閲覧

オブジェクト指向 敵の表示 android studio

1236

総合スコア19

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/07/15 02:50

前提・実現したいこと

シューティングゲームを作成しているのですが、オブジェクト指向を用いて敵を複数表示させたいです。

発生している問題・エラーメッセージ

Player.java(敵クラス)をMainActivity.javaで呼び出して表示させようとしています。1体の表示はできたのですが、配列を用いて複数表示させようとするとビルドは成功しますが実行しても何も表示されません。content内で次のように定義しています。

Player[] player = new Player[playerNum]; for (int i = 0; i < playerNum; i++) player[i] = new Player(player1, playerX, playerY);
上記の一文目のplayerにカーソルを合わせると、 Contents of array 'player' are written to, but never read とでます。読まれてないので表示されないのだと思いますがどうしたら良いでしょうか?

該当のソースコード

Player.java

public class Player { public Drawable player1; public int playerX, playerY, playerSize; public Rect playerR; public boolean playerT; public int screenWidth, screenHeight; public Player(Drawable player1, int dx, int dy){ this.player1 = player1; this.playerX = dx; this.playerY = dy; } public void draw(Canvas canvas){ if (playerT) { playerR = new Rect(playerX - playerSize / 2, playerY - playerSize / 2, playerX + playerSize / 2, playerY + playerSize / 2); if (playerR.left <= 0) playerR.left = 0; // 左側 if (playerR.right >= screenWidth) playerR.right = screenWidth; // 右側 if (playerR.top <= 0) playerR.top = 0; // 上側 if (playerR.bottom >= screenHeight) playerR.bottom = screenHeight; // 下側 player1.setBounds(playerR); player1.draw(canvas); } } public void move(){ if (playerT == false) { playerX = (int)screenWidth/2; playerY = (int)screenHeight * 7/10; playerT = true; } } }

MainActivity.java

public Player[] player; -------content------------------------------------------------------ Player[] player = new Player[playerNum]; for (int i = 0; i < playerNum; i++) player[i] = new Player(player1, playerX, playerY); -------------------------------------------------------------------- -------canvas------------------------------------------------------- if (Math.random() < 0.5) { for (int i = 0; i < playerNum; i++) { player[i].draw(canvas); } } for (int i = 0; i < playerNum; i++) { player[i].playerSize = playerSize; player[i].screenHeight = screenHeight; player[i].screenWidth = screenWidth; player[i].playerX += -3 * (int) sensorX; player[i].playerY += 3 * (int) sensorY; player[i].move(); } --------------------------------------------------------------------

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2020/07/15 05:02

何も表示されないとはどのような状況でしょうか? 配列のクラスのインスタンスが出来ているか確認してもらってもよろしいでしょうか? 後、敵の座標が全て同じに見えましたが、これは意図してやっていることですか?
1236

2020/07/15 06:42

配列を使わなければ画像が1つ表示されますが、配列に書き換えたところ画像が1つも表示されないです。配列のクラスのインスタンスが出来ているかは、どのように確認したら良いでしょうか?敵の座標が同じということですが、X座標はランダム関数で決め、Y座標はランダム関数のマイナスの値を入力し、y += 20;など上から降ってくるようにする予定です。
1236

2020/07/15 08:10

playerNumを初期化していなかったので初期化したところ、実行するとアプリが落ちるようになってしまいました。
stdio

2020/07/16 00:49

playerNumはint型たど思うので、初期化されていないようでしたら、初期値である0が挿入されています。 static final int playerNum = 10 のように静的で不変な変数へしてもいいかも知れません。 そして、ブレイクポイントを用いたステップ実行と標準出力でのPlayerクラスのインスタンスの確認を行ってみた方が良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問