回答編集履歴

1

見直しキャンペーン中

2023/07/29 14:01

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -1,179 +1,90 @@
1
1
  > 雪が降るプログラムの中に星と動く文字を追加したいです。
2
2
 
3
-
4
-
5
3
  2つのプログラムを合体させようとしているわけですね?
6
-
7
4
  単に2つのプログラムをコピペするだけでは動きません。
8
-
9
-
10
5
 
11
6
  `size (600,600)`・`size(400, 200)`となっていては、どっちのサイズで表示すればいいかわかりませんよね?(そして`setup()`と`draw()`は、複数書けません)
12
7
 
13
-
14
-
15
8
  つまりそれぞれの`setup()`・`draw()`を、ひとつの`setup()`・`draw()`に適切に合体させる必要があります。
16
9
 
17
-
18
-
19
10
  `draw()`では後に描くほど上になりますから、コードの順番も非常に重要になります。
20
-
21
11
  とりあえず雪を最初に描きましたが、順番を変えてみたりしてください。
22
12
 
23
-
24
-
25
13
  ```Processing
26
-
27
14
  Snowflake[] sf = new Snowflake[2000];
28
-
29
15
  float x;
30
-
31
16
  PFont font;
32
-
33
17
  String msg = "Winter";
34
-
35
18
  float speed = -1;
36
-
37
19
  String msgLine = "";
38
-
39
20
  float msgWidth;
40
21
 
41
22
 
42
-
43
-
44
-
45
23
  void setup() {
46
-
47
24
  size(600, 600);
48
-
49
25
  noCursor();
50
26
 
27
+ for (int i = 0; i < sf.length; i++) {
28
+ sf[i] = new Snowflake();
29
+ }
51
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);
52
44
 
53
45
  for (int i = 0; i < sf.length; i++) {
54
-
55
- sf[i] = new Snowflake();
46
+ sf[i].drop();
56
-
57
47
  }
58
48
 
59
-
60
-
61
- font = createFont("Calibri Bold Italic", 48);
62
-
63
- textFont(font);
64
-
65
- textSize(32);
66
-
67
- x = width;
68
-
69
- msgWidth = textWidth(msg);
70
-
71
- for (int i = 0; i < (int) (width / msgWidth) + 2; i++) {
49
+ for (int i = 0; i < 10; i++) {
72
-
50
+ fill((i % 2 + 1) * 128, (i % 2 + 1) * 128, 0);
51
+ float r = i * TAU / 10 - PI / 2;
73
- msgLine += msg;
52
+ float d = 100 - i % 2 * 50;
74
-
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);
75
55
  }
76
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
+ }
77
64
  }
78
65
 
79
66
 
80
-
81
- void draw() {
82
-
83
- //background(255);
84
-
85
- background(12, 15, 32);
86
-
87
-
88
-
89
- for (int i = 0; i < sf.length; i++) {
90
-
91
- sf[i].drop();
92
-
93
- }
94
-
95
-
96
-
97
- for (int i = 0; i < 10; i++) {
98
-
99
- fill((i % 2 + 1) * 128, (i % 2 + 1) * 128, 0);
100
-
101
- float r = i * TAU / 10 - PI / 2;
102
-
103
- float d = 100 - i % 2 * 50;
104
-
105
- float e = 100 - (i + 1) % 2 * 50;
106
-
107
- triangle(120, 120, cos(r) * d + 120, sin(r) * d + 120, cos(r + TAU / 10) * e + 120, sin(r + TAU / 10) * e + 120);
108
-
109
- }
110
-
111
-
112
-
113
- // fill(0);
114
-
115
- fill(255);
116
-
117
- text(msgLine, x, height / 2);
118
-
119
- x = x + speed;
120
-
121
- if (x < -msgWidth) {
122
-
123
- x = 0;
124
-
125
- }
126
-
127
- }
128
-
129
-
130
-
131
-
132
-
133
67
  class Snowflake {
134
-
135
68
  float x = random(width);
136
-
137
69
  float y = random(height);
138
-
139
70
  float dy = random(0, 3);
140
-
141
71
  float s = 5 * dy / 4.0;
142
-
143
72
  color c = #ffffff;
144
73
 
145
-
146
-
147
74
  void drop() {
148
-
149
75
  y += dy;
150
-
151
76
  if (y > height) y = 0;
152
-
153
77
  noStroke();
154
-
155
78
  fill(c);
156
-
157
79
  ellipse(x, y, s, s);
158
-
159
80
  }
160
-
161
81
  }
162
-
163
82
  ```
164
-
165
-
166
83
 
167
84
  ---
168
85
 
169
-
170
-
171
86
  他変更点
172
-
173
87
  * `sf`を2000個しか使っていないようなので、[2000]に変更(ループも`sf.length`に)
174
-
175
88
  * 変数は上にまとめる
176
-
177
89
  * クラスは下に(あるいは別タブに)
178
-
179
- * `Snowflake`のコンストラクタでの初期化が冗長なので宣言時に
90
+ * `Snowflake`のコンストラクタでの初期化が冗長なので宣言時に