teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/29 14:01

投稿

TN8001
TN8001

スコア10108

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`のコンストラクタでの初期化が冗長なので宣言時に