javaがわかるかた、ご教示頂けたらと思います。
以下のメソッドを呼び出そうとすると、NullpointerExceptionが出ます。
配列を初期化してから、処理を書いているいつもりですが、何が足りないのでしょうか?
クラス名は割愛しています。
メソッドは下記のrect()を使おうと考えています。
/画像の位置(x, y)、画像のサイズ(w, h)を返す**************/
import java.awt.Rectangle;
Game_Control gc;
//画像Sprite.libe
//敵機が何体存在しているかチェックする
int num_x = 3;
int num_y = 3;
PImage[][] enemys_Image = new PImage[num_x][num_y];
Rectangle[][] enemys_rect = new Rectangle[num_x][num_y];
public class Enemy_Machine{
int fromx, fromy;
int[][] fromw, fromh;
//コンストラクタ
Enemy_Machine(int fromx, int fromy, int[][] fromw, int[][] fromh){
this.fromx = fromx;//横の位置
this.fromy = fromy;//縦の位置
this.fromw = fromw;//画像のサイズ横
this.fromh = fromh;//画像のサイズ縦
}
//表示
int[][] display(){
int[][] enemy_display = new int[num_x][num_y];
for(int num_x = 0; num_x < enemys_Image[0].length; num_x++){
for(int num_y = 0; num_y < enemys_Image.length; num_y++){
enemys_Image[num_x][num_y] = loadImage("enemy1.png"); fromx = 800; println("enemys_Image[0][0]" + enemys_Image[0][0]); println("enemys_Image[0][1]" + enemys_Image[0][1]); println("enemys_Image[0][2]" + enemys_Image[0][2]); println("enemys_Image[1][0]" + enemys_Image[1][0]); println("enemys_Image[1][1]" + enemys_Image[1][1]); println("enemys_Image[1][2]" + enemys_Image[1][2]); //enemys_Image[0][0] = null; image( enemys_Image[num_x][num_y], fromx + num_x * 60 + 30, fromy + num_y * 80 + 50, width/15, height/8 ); } } return enemy_display;
}
//非表示
int[][] un_display(){
int[][] un_enemy_display = new int[num_x][num_y];
for(int num_x = 0; num_x < enemys_Image[0].length; num_x++){
for(int num_y = 0; num_y < enemys_Image.length; num_y++){
enemys_Image[num_x][num_y] = loadImage("enemy1.png"); image( enemys_Image[num_x][num_y], fromx + num_x * 60 + 30, fromy + num_y * 80 + 50, width/1000, height/1000 ); } } return un_enemy_display;
}
//動作
int[][] move(){
int[][] enemy_move = new int[num_x][num_y];
for(int num_x = 0; num_x < enemys_Image[0].length; num_x++){
for(int num_y = 0; num_y < enemys_Image.length; num_y++){
enemys_Image[num_x][num_y] = loadImage("enemy1.png"); image(enemys_Image[num_x][num_y], fromx + num_x * 60 + 30, fromy + num_y * 80 + 50); fromx--; if(fromx < 0){ fromx = 1000; //fromy = (int)random(100); fromx --; } } } return enemy_move;
}
//横のサイズを返すメソッド 78
int[][] get_width(){
int[][] ImageWidth = new int[num_x][num_y];
for(int num_x = 0; num_x < enemys_Image[0].length; num_x++){ for(int num_y = 0; num_y < enemys_Image.length; num_y++){ enemys_Image[num_x][num_y] = loadImage("enemy1.png"); ImageWidth[num_x][num_y] = enemys_Image[num_x][num_y].width; } } return ImageWidth;
}
//縦のサイズを返すメソッド 60
int[][] get_height(){
int[][] ImageHeight = new int[num_x][num_y];
for(int num_x = 0; num_x < enemys_Image[0].length; num_x++){ for(int num_y = 0; num_y < enemys_Image.length; num_y++){ enemys_Image[num_x][num_y] = loadImage("enemy1.png"); ImageHeight[num_x][num_y] = enemys_Image[num_x][num_y].height; } } return ImageHeight;
}
void rect(){
for(int a = 0; a < enemys_Image[0].length; a++){ for(int b = 0; b < enemys_Image.length; b++){ for(int num_x = 0; num_x < enemys_Image[0].length; num_x++){ for(int num_y = 0; num_y < enemys_Image.length; num_y++){ enemys_rect[a][b] = new Rectangle(fromx, fromy, fromw[num_x][num_y], fromh[num_x][num_y]); //println("enemys_rect" + enemys_rect); } } } }
}
}//EOF
わかる方が行っらしゃいましたらご教示の程お願いいたします。