前提・実現したいこと
シューティングゲームを作成しているのですが、オブジェクト指向を用いて敵を複数表示させたいです。
発生している問題・エラーメッセージ
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(); } --------------------------------------------------------------------
何も表示されないとはどのような状況でしょうか?
配列のクラスのインスタンスが出来ているか確認してもらってもよろしいでしょうか?
後、敵の座標が全て同じに見えましたが、これは意図してやっていることですか?
配列を使わなければ画像が1つ表示されますが、配列に書き換えたところ画像が1つも表示されないです。配列のクラスのインスタンスが出来ているかは、どのように確認したら良いでしょうか?敵の座標が同じということですが、X座標はランダム関数で決め、Y座標はランダム関数のマイナスの値を入力し、y += 20;など上から降ってくるようにする予定です。
playerNumを初期化していなかったので初期化したところ、実行するとアプリが落ちるようになってしまいました。
playerNumはint型たど思うので、初期化されていないようでしたら、初期値である0が挿入されています。
static final int playerNum = 10
のように静的で不変な変数へしてもいいかも知れません。
そして、ブレイクポイントを用いたステップ実行と標準出力でのPlayerクラスのインスタンスの確認を行ってみた方が良いと思います。
あなたの回答
tips
プレビュー