前提・実現したいこと
processingでブロック崩しを作りたい
発生している問題・エラーメッセージ
ブロックとボールの当たり判定を作ろうとしている際、ブロックが表示されなくなってしまいました。
if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y+40 > bl[i][j].y && is_alive[i][j]){//UP
から始まる当たり判定の部分をコメントアウトすれば表示されるのでその付近の記述がおかしいのだろうと思うのですが……
どのように修正すればブロックが表示されるようになるでしょうか?
該当のソースコード
processing
1Ball b; 2Bar B; 3Block[][] bl; 4boolean is_alive[][] = new boolean[8][6]; 5int x,y; 6 7void setup(){ 8 size(1000,900); 9 b = new Ball(); 10 B = new Bar(); 11 bl = new Block[8][6]; 12 for(int i=0;i<8;i++){ 13 for(int j=0;j<6;j++){ 14 is_alive[i][j] = true; 15 } 16 } 17} 18 19 20 21 22void draw(){ 23 background(200,200,200); 24 b.show(); 25 B.show(); 26 b.update(); 27 for (int i = 0; i < 8; i++) { 28 for (int j = 0; j < 6; j++) { 29 x=i*100+100; 30 y=j*50+100; 31 bl[i][j]= new Block(x,y); 32 } 33 } 34 35 36 if(b.x> mouseX && b.x<mouseX +90 && b.y>770 && b.y<800 ){ 37 b.boundY(); 38 } 39 40 41 for(int i=0;i<8;i++){ 42 for(int j=0;j<6;j++){ 43 if(is_alive[i][j]){ 44 bl[i][j].show(x,y); 45 } 46 47 if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y+40 > bl[i][j].y && is_alive[i][j]){//UP 48 b.boundY(); 49 is_alive[i][j] = false; 50 } 51 else if(b.x+40 >bl[i][j].x &&( b.y > bl[i][j].y && b.y+40 <bl[i][j].y+50) && is_alive[i][j]){//LEFT 52 b.boundX(); 53 is_alive[i][j] = false; 54 }else if(b.x<bl[i][j].x+100 &&( b.y+40 <bl[i][j].y+50 && b.y > bl[i][j].y) && is_alive[i][j]){//RIGHT 55 b.boundX(); 56 is_alive[i][j] = false; 57 }else if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y <bl[i][j].y+50 && is_alive[i][j]){//DOWN 58 b.boundY(); 59 is_alive[i][j] = false; 60 }else if(b.y<bl[i][j].y+50 && b.x+40>bl[i][j].x && is_alive[i][j]){//DOWN_LEFT 61 b.boundXY(); 62 is_alive[i][j] = false; 63 }else if(b.y+40>bl[i][j].y && b.x+40>bl[i][j].x && is_alive[i][j]){//UP_LEFT 64 b.boundXY(); 65 is_alive[i][j] = false; 66 }else if(b.y+40>bl[i][j].y+50 && b.x<bl[i][j].x+50 && is_alive[i][j]){// 67 b.boundXY(); 68 is_alive[i][j] = false; 69 } 70 else if(b.y<bl[i][j].y+50 && b.x<bl[i][j].x+50 && is_alive[i][j]){// 71 b.boundXY(); 72 is_alive[i][j] = false; 73 } 74 75 76 } 77} 78} 79 80public class Block {//ブロック 81 int WIDTH = 100; 82 int HEIGHT = 50; 83 public int x; 84 public int y; 85 86 87public Block(int x, int y) { 88 this.x = x; 89 this.y = y; 90 91 } 92public void show(int x,int y){ 93 rect(x,y,WIDTH,HEIGHT); 94 95} 96} 97 98class Bar{//ボールを打ち返す棒 99 float x,y; 100Bar(){ 101 x=mouseX; 102 y=770; 103} 104 105void show(){ 106 rect(mouseX,y,90,50); 107} 108 109} 110class Ball{// ボール 111 float x,y; 112 int vx,vy; 113 114Ball(){ 115 x=450; 116 y=760; 117 vx=-4; 118 vy=-4; 119} 120 121void show(){ 122 ellipse(x,y,40,40); 123 124} 125 126void update(){ 127 x +=vx; 128 y +=vy; 129 if(x>width||x<0){ 130 boundX(); 131 } 132 if(y<0){ 133 boundY(); 134 } 135} 136void boundX(){ 137 vx=-vx; 138} 139void boundY(){ 140 vy=-vy; 141} 142 143void boundXY(){ 144 vx=-vx; 145 vy=-vy; 146} 147 148} 149 150 151
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。