回答編集履歴
1
見直しキャンペーン中
answer
CHANGED
@@ -1,90 +1,90 @@
|
|
1
|
-
> 雪が降るプログラムの中に星と動く文字を追加したいです。
|
2
|
-
|
3
|
-
2つのプログラムを合体させようとしているわけですね?
|
4
|
-
単に2つのプログラムをコピペするだけでは動きません。
|
5
|
-
|
6
|
-
`size (600,600)`・`size(400, 200)`となっていては、どっちのサイズで表示すればいいかわかりませんよね?(そして`setup()`と`draw()`は、複数書けません)
|
7
|
-
|
8
|
-
つまりそれぞれの`setup()`・`draw()`を、ひとつの`setup()`・`draw()`に適切に合体させる必要があります。
|
9
|
-
|
10
|
-
`draw()`では後に描くほど上になりますから、コードの順番も非常に重要になります。
|
11
|
-
とりあえず雪を最初に描きましたが、順番を変えてみたりしてください。
|
12
|
-
|
13
|
-
```Processing
|
14
|
-
Snowflake[] sf = new Snowflake[2000];
|
15
|
-
float x;
|
16
|
-
PFont font;
|
17
|
-
String msg = "Winter";
|
18
|
-
float speed = -1;
|
19
|
-
String msgLine = "";
|
20
|
-
float msgWidth;
|
21
|
-
|
22
|
-
|
23
|
-
void setup() {
|
24
|
-
size(600, 600);
|
25
|
-
noCursor();
|
26
|
-
|
27
|
-
for (int i = 0; i < sf.length; i++) {
|
28
|
-
sf[i] = new Snowflake();
|
29
|
-
}
|
30
|
-
|
31
|
-
font = createFont("Calibri Bold Italic", 48);
|
32
|
-
textFont(font);
|
33
|
-
textSize(32);
|
34
|
-
x = width;
|
35
|
-
msgWidth = textWidth(msg);
|
36
|
-
for (int i = 0; i < (int) (width / msgWidth) + 2; i++) {
|
37
|
-
msgLine += msg;
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
void draw() {
|
42
|
-
//background(255);
|
43
|
-
background(12, 15, 32);
|
44
|
-
|
45
|
-
for (int i = 0; i < sf.length; i++) {
|
46
|
-
sf[i].drop();
|
47
|
-
}
|
48
|
-
|
49
|
-
for (int i = 0; i < 10; i++) {
|
50
|
-
fill((i % 2 + 1) * 128, (i % 2 + 1) * 128, 0);
|
51
|
-
float r = i * TAU / 10 - PI / 2;
|
52
|
-
float d = 100 - i % 2 * 50;
|
53
|
-
float e = 100 - (i + 1) % 2 * 50;
|
54
|
-
triangle(120, 120, cos(r) * d + 120, sin(r) * d + 120, cos(r + TAU / 10) * e + 120, sin(r + TAU / 10) * e + 120);
|
55
|
-
}
|
56
|
-
|
57
|
-
// fill(0);
|
58
|
-
fill(255);
|
59
|
-
text(msgLine, x, height / 2);
|
60
|
-
x = x + speed;
|
61
|
-
if (x < -msgWidth) {
|
62
|
-
x = 0;
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
|
67
|
-
class Snowflake {
|
68
|
-
float x = random(width);
|
69
|
-
float y = random(height);
|
70
|
-
float dy = random(0, 3);
|
71
|
-
float s = 5 * dy / 4.0;
|
72
|
-
color c = #ffffff;
|
73
|
-
|
74
|
-
void drop() {
|
75
|
-
y += dy;
|
76
|
-
if (y > height) y = 0;
|
77
|
-
noStroke();
|
78
|
-
fill(c);
|
79
|
-
ellipse(x, y, s, s);
|
80
|
-
}
|
81
|
-
}
|
82
|
-
```
|
83
|
-
|
84
|
-
---
|
85
|
-
|
86
|
-
他変更点
|
87
|
-
* `sf`を2000個しか使っていないようなので、[2000]に変更(ループも`sf.length`に)
|
88
|
-
* 変数は上にまとめる
|
89
|
-
* クラスは下に(あるいは別タブに)
|
90
|
-
* `Snowflake`のコンストラクタでの初期化が冗長なので
|
1
|
+
> 雪が降るプログラムの中に星と動く文字を追加したいです。
|
2
|
+
|
3
|
+
2つのプログラムを合体させようとしているわけですね?
|
4
|
+
単に2つのプログラムをコピペするだけでは動きません。
|
5
|
+
|
6
|
+
`size (600,600)`・`size(400, 200)`となっていては、どっちのサイズで表示すればいいかわかりませんよね?(そして`setup()`と`draw()`は、複数書けません)
|
7
|
+
|
8
|
+
つまりそれぞれの`setup()`・`draw()`を、ひとつの`setup()`・`draw()`に適切に合体させる必要があります。
|
9
|
+
|
10
|
+
`draw()`では後に描くほど上になりますから、コードの順番も非常に重要になります。
|
11
|
+
とりあえず雪を最初に描きましたが、順番を変えてみたりしてください。
|
12
|
+
|
13
|
+
```Processing
|
14
|
+
Snowflake[] sf = new Snowflake[2000];
|
15
|
+
float x;
|
16
|
+
PFont font;
|
17
|
+
String msg = "Winter";
|
18
|
+
float speed = -1;
|
19
|
+
String msgLine = "";
|
20
|
+
float msgWidth;
|
21
|
+
|
22
|
+
|
23
|
+
void setup() {
|
24
|
+
size(600, 600);
|
25
|
+
noCursor();
|
26
|
+
|
27
|
+
for (int i = 0; i < sf.length; i++) {
|
28
|
+
sf[i] = new Snowflake();
|
29
|
+
}
|
30
|
+
|
31
|
+
font = createFont("Calibri Bold Italic", 48);
|
32
|
+
textFont(font);
|
33
|
+
textSize(32);
|
34
|
+
x = width;
|
35
|
+
msgWidth = textWidth(msg);
|
36
|
+
for (int i = 0; i < (int) (width / msgWidth) + 2; i++) {
|
37
|
+
msgLine += msg;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
void draw() {
|
42
|
+
//background(255);
|
43
|
+
background(12, 15, 32);
|
44
|
+
|
45
|
+
for (int i = 0; i < sf.length; i++) {
|
46
|
+
sf[i].drop();
|
47
|
+
}
|
48
|
+
|
49
|
+
for (int i = 0; i < 10; i++) {
|
50
|
+
fill((i % 2 + 1) * 128, (i % 2 + 1) * 128, 0);
|
51
|
+
float r = i * TAU / 10 - PI / 2;
|
52
|
+
float d = 100 - i % 2 * 50;
|
53
|
+
float e = 100 - (i + 1) % 2 * 50;
|
54
|
+
triangle(120, 120, cos(r) * d + 120, sin(r) * d + 120, cos(r + TAU / 10) * e + 120, sin(r + TAU / 10) * e + 120);
|
55
|
+
}
|
56
|
+
|
57
|
+
// fill(0);
|
58
|
+
fill(255);
|
59
|
+
text(msgLine, x, height / 2);
|
60
|
+
x = x + speed;
|
61
|
+
if (x < -msgWidth) {
|
62
|
+
x = 0;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
class Snowflake {
|
68
|
+
float x = random(width);
|
69
|
+
float y = random(height);
|
70
|
+
float dy = random(0, 3);
|
71
|
+
float s = 5 * dy / 4.0;
|
72
|
+
color c = #ffffff;
|
73
|
+
|
74
|
+
void drop() {
|
75
|
+
y += dy;
|
76
|
+
if (y > height) y = 0;
|
77
|
+
noStroke();
|
78
|
+
fill(c);
|
79
|
+
ellipse(x, y, s, s);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
```
|
83
|
+
|
84
|
+
---
|
85
|
+
|
86
|
+
他変更点
|
87
|
+
* `sf`を2000個しか使っていないようなので、[2000]に変更(ループも`sf.length`に)
|
88
|
+
* 変数は上にまとめる
|
89
|
+
* クラスは下に(あるいは別タブに)
|
90
|
+
* `Snowflake`のコンストラクタでの初期化が冗長なので宣言時に
|