回答編集履歴

1

コード・動画追加

2024/02/09 10:56

投稿

TN8001
TN8001

スコア9385

test CHANGED
@@ -26,3 +26,69 @@
26
26
  ```js
27
27
  if (collidePointEllipse(x, y, hx[i], hy[i], l[i], 高さ)) {
28
28
  ```
29
+
30
+ ---
31
+
32
+ ```js
33
+ const hx = [200];
34
+ const hy = [200];
35
+ const l = [200];
36
+
37
+ let radio;
38
+ let slider;
39
+
40
+ function setup() {
41
+ createCanvas(400, 400);
42
+ rectMode(CENTER);
43
+
44
+ radio = createRadio();
45
+ ['rect', 'circle', 'ellipse'].forEach(x => radio.option(x));
46
+ radio.selected('rect');
47
+
48
+ slider = createSlider(100, 300);
49
+ }
50
+
51
+ function draw() {
52
+ background(200);
53
+
54
+ const x = mouseX;
55
+ const y = mouseY;
56
+ const h = slider.value(); // 楕円高さ
57
+
58
+ for (let i = 0; i < 1; i++) {
59
+ fill(255);
60
+
61
+ switch (radio.value()) {
62
+
63
+ case 'rect': // 矩形での当たり判定の場合
64
+ if (hx[i] - l[i] / 2 <= x && x <= hx[i] + l[i] / 2
65
+ && hy[i] - h / 2 <= y && y <= hy[i] + h / 2) {
66
+ fill('red');
67
+ }
68
+ ellipse(hx[i], hy[i], l[i], h);
69
+
70
+ noFill();
71
+ rect(hx[i], hy[i], l[i], h); // 当たり判定エリア(矩形)
72
+ break;
73
+
74
+ case 'circle': // 円での当たり判定の場合
75
+ if (dist(x, y, hx[i], hy[i]) <= l[i] / 2) {
76
+ fill('red');
77
+ }
78
+ ellipse(hx[i], hy[i], l[i], h);
79
+
80
+ noFill();
81
+ circle(hx[i], hy[i], l[i]); // 当たり判定エリア(円)
82
+ break;
83
+
84
+ case 'ellipse': // 楕円での当たり判定の場合
85
+ if (collidePointEllipse(x, y, hx[i], hy[i], l[i], h)) {
86
+ fill('red');
87
+ }
88
+ ellipse(hx[i], hy[i], l[i], h);
89
+ break;
90
+ }
91
+ }
92
+ }
93
+ ```
94
+ ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2024-02-09/50663a09-604b-4ace-a37f-be80b1b3db8f.gif)