前提・実現したいこと
追加したコードを動かしたい。
発生している問題・エラーメッセージ
下記のコード中に記してある(←追加したもの)コードを追加した所、
実行しても描画されなくなってしまいました。
エラーメッセージも出ておらず、何が原因なのか分かりません。
追加する場所を間違えているのでしょうか?
該当のソースコード
Processing
1import ddf.minim.*; 2import ddf.minim.analysis.*; 3import ddf.minim.effects.*; 4import ddf.minim.signals.*; 5import ddf.minim.spi.*; 6import ddf.minim.ugens.*; 7 8Minim minim; 9AudioPlayer player; 10int buffersize = 512; 11 12class Note { 13 final float x; 14 final float y; 15 final float w; 16 final float h; 17 18 final float r; 19 final float r2; 20 21 final color col;//HSB, alpha 22 23 boolean isAlive = true; 24 25 Note(final float x, final float y, final float playerIn) { 26 this.x = random(minx, maxx); //横 ←追加したもの 27 this.y = random(miny, maxy); //縦 ←追加したもの 28 this.w = playerIn/2; 29 this.h = playerIn/2; 30 this.r = this.w / 2; 31 this.r2 = this.r * this.r; 32 this.col = color(random(360), 100, 100, 70); 33 } 34 35 void draw() { 36 colorMode(HSB, 360, 100, 100, 100); 37 noStroke(); 38 fill(col); 39 // ellipse(x, y, w, h); 40 } 41 42 void update() { 43 } 44 45 boolean isExpired() { 46 return !isAlive; 47 } 48 49 void toggle() { 50 isAlive = !isAlive; 51 } 52} 53 54abstract class Effect { 55 protected float time; 56 protected float t = 0; 57 final float dt = 1.0; 58 59 Effect() { 60 } 61 62 abstract void draw(); 63 64 abstract void update(); 65 66 void dec() { 67 time -= dt; 68 t += dt; 69 } 70 71 boolean isExpired() { 72 return time < 0; 73 } 74} 75 76abstract class MultiEffect extends Effect { 77 ArrayList<Effect> chidren = new ArrayList<Effect>(); 78 79 MultiEffect() { 80 } 81 82 @Override 83 void draw() { 84 for (Effect eff : chidren) { 85 eff.draw(); 86 } 87 } 88 89 @Override 90 void update() { 91 for (Effect eff : chidren) { 92 eff.update(); 93 } 94 } 95 96 @Override 97 boolean isExpired() { 98 for (Effect eff : chidren) { 99 if (!eff.isExpired()) return false; 100 } 101 return true; 102 } 103} 104 105class Bakuhatu extends Effect { 106 final float x; 107 final float y; 108 float r; 109 float dr = 1; 110 final float ddr = 0.5; 111 112 final int R, G, B; 113 int alpha; 114 int da = 0; 115 final int dda = 1; 116 117 Bakuhatu(final float x, final float y, final float r, final color col, final float time) { 118 this.x = x; 119 this.y = y; 120 this.r = r; 121 122 final int mask = 0xFF; 123 alpha = (col>>24) & mask; 124 alpha /= 2; 125 R = (col>>16) & mask; 126 G = (col>>8) & mask; 127 B = col & mask; 128 129 this.time = time; 130 } 131 132 @Override 133 void draw() { 134 noStroke(); 135 //fill(col); 136 colorMode(RGB); 137 fill(R, G, B, alpha); 138 ellipse(x, y, 2*r, 2*r); 139 } 140 141 @Override 142 void update() { 143 dec(); 144 r += dr; 145 dr += ddr; 146 147 alpha -= da; 148 da += dda; 149 } 150} 151 152final float g = 0.2; 153 154class Hinoko extends Effect { 155 float x; 156 float y; 157 final float r = 2; 158 final float v0 = 5; 159 float vx; 160 float vy; 161 162 final float theta; 163 164 final color col; 165 int R, G, B; 166 int alpha; 167 float da = 1; 168 final float dda = 0.05; 169 float drx, dry; 170 float ddrx, ddry; 171 172 Hinoko(final float x, final float y, final float r, final color col, final float theta, final float time) { 173 174 this.x = x; 175 this.y = y; 176 this.vx = v0 * cos(theta); 177 this.vy = v0 * sin(theta); 178 this.col = col; 179 180 final int mask = 0xFF; 181 alpha = (col>>24) & mask; 182 //alpha /= 2; 183 R = (col>>16) & mask; 184 G = (col>>8) & mask; 185 B = col & mask; 186 187 this.drx = 0.5; 188 this.dry = 0.05; 189 this.ddrx = 0.5; 190 this.ddry = 0.05; 191 192 this.time = time; 193 this.theta = theta; 194 } 195 196 @Override 197 void draw() { 198 noStroke(); 199 colorMode(RGB); 200 fill(R, G, B, alpha); 201 ellipse(x, y, r, r); 202 } 203 204 @Override 205 void update() { 206 dec(); 207 208 alpha -= da; 209 da += dda; 210 211 x += vx; 212 y += vy; 213 y += g*t; 214 215 drx += ddrx; 216 dry += ddry; 217 } 218} 219 220class Hanabi extends MultiEffect { 221 Hanabi(final float x, final float y, final float r, final color col) { 222 super(); 223 224 final float timeB = 30; 225 chidren.add(new Bakuhatu(x, y, r, col, timeB)); 226 227 final float timeH = 50; 228 final int max = 32; 229 final float dtheta = TWO_PI / max; 230 for (int i=0; i<max; i++) { 231 chidren.add(new Hinoko(x, y, r, col, dtheta*i, timeH)); 232 } 233 } 234} 235 236class Effects extends ArrayList<Effect> { 237 Effects() { 238 //do nothing 239 } 240 241 void add(Effects temp) { 242 this.addAll(temp); 243 } 244 245 void draw() { 246 for (Effect eff : this) { 247 eff.draw(); 248 } 249 } 250 251 void update() { 252 ArrayList<Effect> temp = new ArrayList<Effect>(); 253 for (Effect eff : this) { 254 eff.update(); 255 if (!eff.isExpired()) temp.add(eff); 256 } 257 this.clear(); 258 this.addAll(temp); 259 } 260} 261 262class NoteController { 263 ArrayList<Note> notes = new ArrayList<Note>(); 264 265 final float margin = 100; 266 final float xmin = margin; 267 final float xmax = width-margin; 268 final float ymin = margin; 269 final float ymax = height-margin; 270 271 NoteController() { 272 // 273 } 274 //円の制御 275 void add(final float playerIn) { 276 if (notes.size() > 100) return;//check 277 if (playerIn < 20) return; 278 if (frameCount % 20 != 0) return; 279 280 final float x = random(xmin, xmax); 281 final float y = random(ymin, ymax); 282 notes.add(new Note(x, y, playerIn)); 283 } 284 285 void draw() { 286 for (Note note : notes) { 287 note.draw(); 288 } 289 } 290 291 ArrayList<Note> update() { 292 ArrayList<Note> next = new ArrayList<Note>(); 293 ArrayList<Note> del = new ArrayList<Note>(); 294 for (Note note : notes) { 295 note.update(); 296 if (note.isExpired()) { 297 del.add(note); 298 } else { 299 next.add(note); 300 } 301 } 302 notes.clear(); 303 notes.addAll(next); 304 return del; 305 } 306 307 //真偽を使って判断 308 boolean isHit(final Note note) { 309 return true; 310 } 311 //全指定 312 void mouseClicked() { 313 for (Note note : notes) { 314 note.toggle(); 315 } 316 } 317} 318 319class Converter { 320 Effects makeHanabis(ArrayList<Note> notes) { 321 Effects temp = new Effects(); 322 for (Note note : notes) { 323 temp.add(makeHanabi(note)); 324 } 325 return temp; 326 } 327 328 Hanabi makeHanabi(Note note) { 329 Hanabi temp = new Hanabi(note.x, note.y, note.r, note.col); 330 return temp; 331 } 332} 333 334NoteController controller; 335Effects effects; 336Converter converter; 337 338float minx, maxx; 339float miny, maxy; 340ArrayList<PVector> bow=new ArrayList<PVector>(); 341 342void setup() { 343 fullScreen(); 344 frameRate(60); 345 colorMode(HSB, 360, 100, 100, 100); 346 controller = new NoteController(); 347 effects = new Effects(); 348 converter = new Converter(); 349 350 minim = new Minim(this); 351 //in = minim.getLineIn(Minim.STEREO,buffersize); 352 final String fn = "Mountain.mp3"; 353 player = minim.loadFile(fn); 354 player.loop(); 355} 356 357void draw(float x, float y) { 358 background(200); 359 360 Tree(30, width/2, height, PI, width/7); 361 362 //↓追加したもの 363EXIT: 364 while (true) { 365 x = random(minx, maxx); //横 366 y = random(miny, maxy); //縦 367 for (PVector p : bow) { 368 if (dist(x, y, p.x, p.y )<20) { 369 370 noStroke(); 371 fill(random(255), random(255), random(255), 50); 372 ellipse(x, y, 10, 10); 373 374 fill(#959592); 375 rect(0, 1030, 2000, 50); 376 break EXIT; 377 } 378 } 379 } 380 //↑追加したもの 381 382 final float playerIn = player.mix.level()*150; 383 controller.add(playerIn); 384 controller.draw(); 385 ArrayList<Note> temp = controller.update(); 386 387 effects.add(converter.makeHanabis(temp)); 388 effects.draw(); 389 effects.update(); 390} 391 392//木の生成 393void Tree(float strokeWeight, float x, float y, float rotate, float length) { 394 pushMatrix(); //座標を一時保存 395 translate(x, y); //座標移動 396 rotate(rotate); //座標回転 397 strokeWeight(strokeWeight); //線の輪郭線の太さ 398 stroke(70, 0, 0); //線の色 399 line(0, 0, 0, length); //線の描画,配列の長さ 400 popMatrix(); //変更した座標を元に戻す 401 402 //↓追加したもの 403 if (strokeWeight<2 || x%5>3 && strokeWeight<3) { 404 float xx=x-sin(rotate)*length; 405 float yy=y+cos(rotate)*length; 406 if (xx<minx) { 407 minx=xx; 408 } 409 if (xx>maxx) { 410 maxx=xx; 411 } 412 if (yy<miny) { 413 miny=yy; 414 } 415 if (yy>maxy) { 416 maxy=yy; 417 } 418 PVector endp=new PVector(xx, yy); 419 bow.add(endp); 420 return; 421 } 422 //↑追加したもの 423 424 Tree(strokeWeight*2/3, x-sin(rotate)*length, y+cos(rotate)*length, rotate-PI/10, length*2/3); 425 Tree(strokeWeight*2/3, x-sin(rotate)*length, y+cos(rotate)*length, rotate+PI/10, length*2/3); 426} 427 428void keyPressed() { 429 if (key == 's') { //音楽ストップ 430 player.pause(); 431 } else if (key == 'r') { //音楽リスタート 432 player.rewind(); 433 player.play(); 434 } 435} 436 437void stop() { 438 minim.stop(); 439 super.stop(); 440} 441 442void mouseClicked() { 443 controller.mouseClicked(); 444} 445
補足情報(FW/ツールのバージョンなど)
Processing 3.5.3
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。