回答編集履歴
1
改行削除
test
CHANGED
@@ -1,145 +1,72 @@
|
|
1
1
|
大変素晴らしいコードなのですが、クラスが多くProcessingは内部クラスになる仕様上アクセス修飾子が意味がなくなるので、ちょっとコードが追いにくいですね。
|
2
|
-
|
3
2
|
しかし順番に落ち着いて読んでいくと、案外すぐ目的のものに行き当たりました。
|
4
3
|
|
5
|
-
|
6
|
-
|
7
4
|
まず要件をまとめると、
|
8
|
-
|
9
5
|
1. どこでクリックしても拡散する
|
10
|
-
|
11
6
|
2. クリックしたら描画されている円を全て拡散する
|
12
|
-
|
13
7
|
3. クリックをしなくてもランダムな色の円がランダムな場所に描画され続ける
|
14
|
-
|
15
|
-
|
16
8
|
|
17
9
|
ですね。
|
18
10
|
|
11
|
+
---
|
19
12
|
|
13
|
+
**[注意]**
|
14
|
+
これ以降同名のメソッドが多いので、本体?PApplet?直に置かれてるsetup()やdraw()をApp.setup()と書き、class Noteのdraw()をNote.draw() と書くこととします。
|
20
15
|
|
21
16
|
---
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
**[注意]**
|
26
|
-
|
27
|
-
これ以降同名のメソッドが多いので、本体?PApplet?直に置かれてるsetup()やdraw()をApp.setup()と書き、class Noteのdraw()をNote.draw() と書くこととします。
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
---
|
32
|
-
|
33
|
-
|
34
|
-
|
35
18
|
1. 2.はクリックに関連するでしょうから、`App.mouseClicked()`を見ます。
|
36
|
-
|
37
19
|
`NoteController.mouseClicked()`に任せています。
|
38
|
-
|
39
20
|
ちゃんと読んでもいいんですが、きっと`find()`でnoteのindexを探し、なければ何もせずあれば`Note.toggle()`ってことでしょう。
|
40
21
|
|
41
|
-
|
42
|
-
|
43
22
|
まずここで全部拡散なので、findする必要はなくなります。
|
44
|
-
|
45
23
|
```Processing
|
46
|
-
|
47
24
|
void mouseClicked() {
|
48
|
-
|
49
25
|
for (Note note : notes) {
|
50
|
-
|
51
26
|
note.toggle();
|
52
|
-
|
53
27
|
}
|
54
|
-
|
55
28
|
}
|
56
|
-
|
57
29
|
```
|
58
|
-
|
59
30
|
実行します。
|
60
|
-
|
61
31
|
はい、もう1.2.は終わってしまいました。
|
62
32
|
|
63
|
-
|
64
|
-
|
65
33
|
実は問題は3.です。
|
66
|
-
|
67
34
|
拡散した後一瞬でパララと10個円が出たと思いますが、追加のペースが遅いと全部消えた後寂しいですし、早すぎるとあっという間に画面中覆いつくされそうです。
|
68
|
-
|
69
|
-
どういうイメージなのかがわからないので、調整ポイントを押さえて
|
35
|
+
どういうイメージなのかがわからないので、調整ポイントを押さえて細かい調整はmswさんに任せます。
|
70
|
-
|
71
|
-
細かい調整はmswさんに任せます。
|
72
|
-
|
73
|
-
|
74
36
|
|
75
37
|
では追加部分を見てみます。
|
76
38
|
|
77
|
-
|
78
|
-
|
79
39
|
起点はApp.draw()内の`controller.add(playerIn);`です。
|
80
|
-
|
81
40
|
`NoteController.add()`を見ます。
|
82
|
-
|
83
41
|
`if (notes.size() > 10) return;` 円の最大個数ですね。
|
84
|
-
|
85
42
|
`if (playerIn < 20) return;` 音量が小さすぎる場合は無視するようです。
|
86
|
-
|
87
43
|
`notes.add(new Note(x, y, playerIn));` 円を追加してるんでしょう。
|
88
44
|
|
89
|
-
|
90
|
-
|
91
45
|
なるほど。ここは毎フレーム呼ばれるので拡散した後、一気に増えたわけですね。
|
92
|
-
|
93
46
|
一気に増えないように、
|
94
|
-
|
95
47
|
```Processing
|
96
|
-
|
97
48
|
void add(final float playerIn) {
|
98
|
-
|
99
49
|
if (notes.size() > 100) return;//check
|
100
|
-
|
101
50
|
if (playerIn < 20) return;
|
102
|
-
|
103
51
|
if (frameCount % 30 != 0) return;
|
104
52
|
|
105
|
-
|
106
|
-
|
107
53
|
final float x = random(xmin, xmax);
|
108
|
-
|
109
54
|
final float y = random(ymin, ymax);
|
110
|
-
|
111
55
|
notes.add(new Note(x, y, playerIn));
|
112
|
-
|
113
56
|
}
|
114
|
-
|
115
57
|
```
|
116
|
-
|
117
58
|
としてみましたが規則的過ぎていけませんね。
|
118
|
-
|
119
59
|
`if (frameCount % (int)random(10, 30) != 0) return;`私はこんなもんかな?と思いましたが、今ある円の個数によって変えるとか方法はいろいろありそうです。お好きなように調整してください。
|
120
60
|
|
121
61
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
あとやってるうちに気が付いたんですが、一回拡散した後、円が水色系統だけになりませんか
|
62
|
+
あとやってるうちに気が付いたんですが、一回拡散した後、円が水色系統だけになりませんか?
|
126
|
-
|
127
63
|
そういう仕様ならいいのですがなんか色が減って寂しいので、どうにかならないかと試行錯誤したところ、`Note.draw()`
|
128
|
-
|
129
64
|
```Processing
|
130
|
-
|
131
65
|
void draw() {
|
132
|
-
|
133
66
|
noStroke();
|
134
|
-
|
135
67
|
colorMode(HSB, 360, 100, 100, 100);
|
136
|
-
|
137
68
|
fill(col);
|
138
|
-
|
139
69
|
ellipse(x, y, w, h);
|
140
|
-
|
141
70
|
}
|
142
|
-
|
143
71
|
```
|
144
|
-
|
145
72
|
で色が戻りました。ここはそれでよいのか自信ありません。
|