前提・実現したいこと
processingでブロック崩しゲームを作成しています。
ブロックとボールに当たり判定をつけ、当たったブロックを削除する所まで
できたのですが、当たったあと黒い跡がついてしまいます。
この黒い跡を消したいです。
発生している問題・エラーメッセージ
エラーメッセージは無いです。
該当のソースコード
processing
1int x=100; 2int y=560; 3int bar_w=10;//haba 4int bar_h=100;//nagasa 5int dx=5; 6int blockX=25,blockY=10 ;//blockzahyou 7int[]blocks={blockX,blockY};//zahyou 8int ellipseX=550; 9int ellipseY=545; 10int ellipseDx=5; //hayasa 11int ellipseDy=-2; 12int[][]positions=new int [200][200];//iti 13 14void setup(){ 15 size(1000,600); 16 displayBlocks(blocks,positions);//barwohyouzi 17 noStroke(); 18 loadPixels(); 19} 20 21void draw(){ 22 updatePixels(); 23 keyPressed(); 24 displayBar(); 25 moveBall(); 26 displayBall(); 27 reboundBall(positions); 28} 29 30void displayBar(){ 31 fill(255,0,0); 32 rect(x,y,bar_h,bar_w); 33} 34 35void displayBall(){ 36 fill(0,0,255); 37 ellipse(ellipseX,ellipseY,30,30); 38} 39 40void reboundBall(int[][] positions){ 41 42 if(ellipseX > 1000-15 && ellipseDx >0){ 43 ellipseDx=-ellipseDx; 44 } 45 46 if(ellipseY>583 && ellipseDy>0){ 47 noLoop(); 48 print("GAME OVER."); 49 } 50 51 if(ellipseY<15 && ellipseDy<0){ 52 ellipseDy=abs(ellipseDy);//abs=zettaiti 53 } 54 55 if(ellipseX < 15){ 56 ellipseDx=-ellipseDx; 57 } 58 59 if(ellipseX>= x && ellipseX <= x+100 && ellipseY >= y-17){ 60 ellipseDy=-ellipseDy; 61 } 62 63 for(int i=0;i<200;i++){ 64 noStroke(); 65 smooth(); 66 if(dist(ellipseX,ellipseY,positions[0][i],positions[1][i])<=17){ 67 ellipseDx=-ellipseDx; 68 ellipseDy=-ellipseDy; 69 fill(0); 70 rect(positions[0][i],positions[1][i],20,20); 71 positions[0][i]=-1; 72 positions[1][i]=-1; 73 ellipse(ellipseX,ellipseY,31,31); 74 rect(x,y,100,10); 75 loadPixels(); 76 77 } 78 } 79 80} 81 82void moveBall(){ 83 ellipseX=ellipseX+ellipseDx; 84 ellipseY=ellipseY+ellipseDy; 85} 86 87 88void displayBlocks(int[] block, int positions[][]){ 89 fill(0,255,0); 90 91 for(int i=0; i<200; i++){ 92 93 rect(block[0],block[1],20,20); 94 block[0]=block[0]+25; 95 positions[0][i]=block[0]; 96 positions[1][i]=block[1]; 97 if(block[0]>=950){ 98 block[1]=block[1]+25; 99 block[0]=25; 100 } 101 } 102} 103 104 105void keyPressed(){ 106 if(key==CODED){ 107 switch(keyCode){ 108 case LEFT: 109 if(isBlockedLeft(x)==true){ 110 return; 111 }else{ 112 x=x-dx; 113 } 114 break; 115 116 case RIGHT: 117 if(isBlockedRight(x)==true){ 118 return; 119 }else{ 120 x=x+dx; 121 } 122 break; 123 } 124 } 125} 126 127boolean isBlockedRight(int x){ 128 if(x>=width-bar_h){ 129 return true; 130 }else{ 131 return false; 132 } 133} 134 135boolean isBlockedLeft(int x){ 136 if(x<=0){ 137 return true; 138 }else{ 139 return false; 140 } 141}
試したこと
削除処理するプログラムを見直したのですが、訂正することが見当たりませんでした。
補足情報(FW/ツールのバージョンなど)
processing 3.5.4
回答1件
あなたの回答
tips
プレビュー