###前提・実現したいこと
Processingでカーソルが図形に重なると色が変わるプログラムで、1つ目の図形と2つ目の図形の色を変えた上で、流れる音も変えようとしています。例えば、カーソルが図形に重なる、と図形1は赤色で「ド」の音が、図形2は青色で「レ」の音がなるようにしたいです。minimライブラリを使って音源ファイルを読み込んでいます。
###発生している問題・エラーメッセージ
以下がそのコードですが、現状では全ての図形で「ド」がなってしまいます。
###該当のソースコード
Processing
1import ddf.minim.*; 2import ddf.minim.signals.*; 3import ddf.minim.analysis.*; 4import ddf.minim.effects.*; 5 6ArrayList<MyShape> shapes = new ArrayList<MyShape>(); 7 8void setup() { 9 size(720, 720); 10 background(125); 11 frameRate(100); 12 //1 13 MyShape ichi; 14 ichi = new MyRect(70, 140, 32, 200); 15 ichi.selectedFill = #CE2828; 16 shapes.add(ichi); 17 18 //2 19 MyShape ni; 20 ni = new MyRect(170, 150, 100, 32); 21 ni.selectedFill = #1318F0; 22 shapes.add(ni); 23 ni = new MyRect(238, 182, 32, 43); 24 ni.selectedFill = #1318F0; 25 shapes.add(ni); 26 ni = new MyRect(170, 225, 100, 32); 27 ni.selectedFill = #1318F0; 28 shapes.add(ni); 29 ni = new MyRect(170, 257, 32, 43); 30 ni.selectedFill = #1318F0; 31 shapes.add(ni); 32 ni = new MyRect(170, 300, 100, 32); 33 ni.selectedFill = #1318F0; 34 shapes.add(ni); 35} 36 37void draw() { 38 update(mouseX, mouseY); 39 rect (310, 310, 100, 100); 40 line(360, 0, 360, 720); 41 line(0, 360, 720, 360); 42 noStroke(); 43 44 background(102); 45 46 for (MyShape shape: shapes) { 47 if (shape.contains(mouseX, mouseY)) { 48 49 fill(shape.selectedFill); 50 Minim minim=new Minim(this); 51 AudioSample sample=minim.loadSample("do.wav"); 52 delay(1000); 53 sample.trigger(); 54 } else { 55 fill(204); 56 } 57 shape.draw(); 58 } 59} 60 61// 長方形を表すクラス 62class MyRect extends MyShape { 63 float x, y, w, h; 64 65 MyRect(float x, float y, float w, float h) { 66 this.x = x; 67 this.y = y; 68 this.w = w; 69 this.h = h; 70 } 71 72 void draw() { 73 rect(x, y, w, h); 74 } 75 76 boolean contains(float mx, float my) { 77 return mx >= x && mx <= (x + w) && my >= y && my <= (y + h); 78 } 79} 80 81// 任意の図形を表す抽象クラス 82abstract class MyShape { 83 int selectedFill; 84 // 画面上へこの図形を描画するメソッド 85 abstract void draw(); 86 87 // 指定位置がこの図形に含まれるかどうか判定するメソッド 88 abstract boolean contains(float x, float y); 89}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/09 04:42
退会済みユーザー
2017/07/09 04:58
退会済みユーザー
2017/07/09 05:01
2017/07/09 07:00 編集
退会済みユーザー
2017/07/09 06:32
2017/07/09 07:01
退会済みユーザー
2017/07/09 07:54