前提・実現したいこと
授業の課題でゲームを作っています。
上から降ってくる球をキャッチするゲームです。
発生している問題・エラーメッセージ
当たり判定がうまくいっていません。 球がバーに当たったら色を背景と同じにする、もしくは見えなくして消えさせたいのですが、すり抜けてしまいます。
該当のソースコード
Java
1Basket basket; 2Tanni tanni; 3 4float i = 0; 5 6void setup() { 7 size(1000,800); 8 //fullScreen(); 9 noCursor(); 10 basket = new Basket(); 11 tanni = new Tanni(); 12}; 13 14void draw() { 15 //background(0); 16 fill(0,50); 17 rect(0, 0, width, height); 18 19//keyboard no baai 20 if (keyPressed == true){ 21 if (key == CODED) { 22 if (keyCode == RIGHT) { 23 i++; 24 } else if (keyCode == LEFT) { 25 i--; 26 } else { 27 i = 0; 28 }; 29 } 30 } 31 32 tanni.update(); 33 tanni.display(); 34 35 basket.update(); 36 basket.display(); 37 38//atari hantei 39 boolean hit = hit(basket, tanni); 40 if(hit == true){ 41 tanni.toreta(basket); 42 } 43 /*if((basket.j <= tanni.y) && (tanni.x >= basket.left) && (tanni.x <= basket.right)) { 44 tanni.toreta(); 45 }*/ 46} 47 48boolean hit(Basket b, Tanni t){ 49 if((b.j <= t.y) && (t.x >= b.left) && (t.x <= b.right)) { 50 return true; 51 } else { 52 return false; 53 } 54 } 55 56class Basket { 57 58 float l; 59 int j = height-100; //basket no enchoku ichi 60 int w = 100; //basket no hirosa 61 int h = 10; //basket no takasa 62 63 float left = l - w/2; 64 float right = l + w/2; 65 66 void update() { 67 68 l = width/2 + 10*i; //i ga heruto hidari, i ga fueruto migi 69 l = constrain(l, 200, width-200); //hasikko sitei 70 71 } 72 73 void display() { 74 fill(255); 75 rect(l-w/2, j, w, h); 76 } 77 78} 79 80 81class Tanni { 82 float x, y; //hajimari no ichi 83 int koma = int(random(1,4)); //tanni no kazu 84 int type = int(random(5)); //tanni no shurui 85 int dia; //hannkei 86 float speed = random(3,5); //ochiru hayasa 87 88 //tanni no iro 89 int r, g, b; 90 91 Tanni(){ 92 x = width/2; 93 y = -dia/2; 94 } 95 96 void update() { 97 dia = koma * -20 + 90; 98 y += speed; 99 100 switch(type) { 101 case 0: //fuka 102 r = 255; g = 0; b = 0; 103 break; 104 case 1: //ka 105 r = 0; g = 255; b = 0; 106 break; 107 case 2: //ryou 108 r = 0; g = 0; b = 255; 109 break; 110 case 3: //yuu 111 r = 255; g = 255; b = 0; 112 break; 113 case 4: //shuu 114 r = 255; g = 0; b = 255; 115 break; 116 } 117 118 //ichibann sita made ochita toki 119 if (y > height + dia) { 120 x = random(200, width-200); 121 y = -dia/2; 122 koma = int(random(1,4)); 123 type = int(random(5)); 124 speed = random(3,5); 125 } 126 } 127 128 void display() { 129 fill(r, g, b); 130 noStroke(); 131 ellipse(x, y, dia, dia); 132 } 133 134//tanni ga toreta toki 135 void toreta(Basket s) { 136 r = 0; g = 0; b = 0; 137 //dia = 0; 138 } 139 140}
試したこと
booleanとifの両方を試してみましたがどちらもダメでした。
補足情報(FW/ツールのバージョンなど)
processingを使っています。
回答1件
あなたの回答
tips
プレビュー