質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

308閲覧

描画した円を両方消した時の判定。

tapiokazaki

総合スコア1

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2022/05/22 05:40

編集2022/05/22 06:00

procesingで円をランダムに二つ画面に置いて、その二つともクリックして消した場合、boolean型変数をfalseにする方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tapiokazaki

2022/05/22 07:29

class Ball { int size=50; float x=int(random(size/2, width-size/2)); float y=int(random(size/2, height-size/2)); float a=int(random(size/2, width-size/2)); float b=int(random(size/2, height-size/2)); boolean isClicked; void display() { if (!isClicked) { ellipse(x, y, size, size); } } void move() { x = lerp(x, width / 2, 0.01); y = lerp(y, height / 2, 0.01); } void Goal() { if (isClicked) { fill(0); textAlign(CENTER); textSize(40); text("goal", 400, 400, 200, 200); } } void judgeClicked() { if (dist(x, y, mouseX, mouseY)<=size/2&&mousePressed) { isClicked=true; } } } Ball[] b; void setup() { size(800, 800); int N=2; b=new Ball[N]; for (int i=0; i<N; i++) { b[i]= new Ball(); } } void draw() { background(255); int i=2; for (i=0; i<2; i++) { b[i].move(); b[i].display(); b[i].judgeClicked(); b[i].Goal(); } } この場合に二つのボールの判定がわかりません。
TN8001

2022/05/22 07:49

この欄はインデントされず見にくいので、質問を編集しコードブロックを使って提示していただきますようお願いします。 [teratail【テラテイル】|ITエンジニア特化型Q&Aサイト](https://teratail.com/help/question-tips#questionTips37)
guest

回答1

0

思っていたのと真偽が逆だったので、&&のほうがわかりやすいですね。

こんなイメージであっていますでしょうか?

Processing

1int N = 2; 2Ball[] b; 3int fc; 4 5void setup() { 6 size(800, 800); 7 b = new Ball[N]; 8 for (int i = 0; i < N; i++) { 9 b[i] = new Ball(); 10 } 11} 12 13void draw() { 14 background(255); 15 16 boolean allClicked = true; 17 boolean allHits = true; 18 for (int i = 0; i < b.length; i++) { 19 b[i].move(); 20 b[i].display(); 21 b[i].judgeClicked(); 22 allClicked = allClicked && b[i].isClicked; 23 allHits = allHits && b[i].isHit(); 24 } 25 26 if (!allClicked) { 27 fc = frameCount; 28 } 29 fill(0); 30 textAlign(CENTER); 31 textSize(40); 32 text("" + fc, 40, 40, 200, 200); 33 34 if (allHits) { 35 text("goal", 400, 400, 200, 200); 36 } 37} 38 39class Ball { 40 int size = 50; 41 float x = int(random(size / 2, width - size / 2)); 42 float y = int(random(size / 2, height - size / 2)); 43 boolean isClicked; 44 color c = color(255); 45 46 void display() { 47 if (isClicked) return; 48 49 fill(c); 50 ellipse(x, y, size, size); 51 } 52 53 void move() { 54 if (isClicked) return; 55 56 x = lerp(x, width / 2, 0.01); 57 y = lerp(y, height / 2, 0.01); 58 59 if (abs(x - width / 2) < 20 && abs(y - width / 2) < 20) { 60 c = color(255, 0, 0); 61 } 62 } 63 64 void judgeClicked() { 65 if (isClicked) return; 66 67 if (dist(x, y, mouseX, mouseY) < size / 2 && mousePressed) { 68 isClicked = true; 69 } 70 } 71 72 boolean isHit() { 73 return isClicked && c == color(255); 74 } 75}

投稿2022/05/22 08:18

編集2022/05/22 11:06
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tapiokazaki

2022/05/22 08:34

インデント汚くてすいません。なるほど!本当に助かります!あと、どちらかの円がウィンドウ中央に到着してしまったら消してもゴールが表示されないようにするにはどうすればいいですか?
TN8001

2022/05/22 08:58

> インデント汚くてすいません。 質問はいつでも何度でも編集できるので、この質問から実践してください。 > なるほど! if(hoge && fuga && piyo) みたいなのと同じ仕組みですね。 > どちらかの円がウィンドウ中央に到着してしまったら消してもゴールが表示されないようにするにはどうすればいいですか? 何かフラグを作ってもいいですが、sizeを0にするのが手軽でしょうか?(セコいw void move() { x = lerp(x, width / 2, 0.01); y = lerp(y, height / 2, 0.01); if (abs(x - width / 2) < 10 && abs(y - width / 2) < 10) { size = 0; } } 10は適当に変えてください。
TN8001

2022/05/22 09:08

if (dist(x, y, mouseX, mouseY) <= size / 2 && mousePressed) <= を < にしないとドンピシャでクリックされたら消せちゃうかな?^^;
tapiokazaki

2022/05/22 09:26

ボールが消えるまでの時間も計測しなければいけないので、中心に円がきた時も消さなければいけません。この場合だとどうなりますか?
tapiokazaki

2022/05/22 09:26

間違えました消せるまでの時間ですね。
TN8001

2022/05/22 09:37

size = 0なら消えたように見えませんか?
tapiokazaki

2022/05/22 09:51

最後にプログラミングが始まってから自分で円を消せたところまでの時間も計測して出力しなければいけないので必然的に自分で円を消さなければいけません。
TN8001

2022/05/22 10:12

あぁ勝手に消えるのではなく、あくまで消えるのはクリックによると。 で、中央に来てからのクリックはゴール判定せず、ノーカンにしたいという意味ですか。 ならやっぱり別のフラグがいるでしょうねぇ。 UXとしては「この範囲に入ったら」とか「色が変わったら」とか、もう手遅れということをわかるようになっているといいですね。 例えば色を変えることにしたならば、それをフラグとして利用することもできます。
tapiokazaki

2022/05/22 10:48

たびたびすいません。 その場合だとコードはどうなりますか?
TN8001

2022/05/22 11:06

> その場合だとコードはどうなりますか? 乗りかかった船ですしコードを書きたいから回答しているようなものなのでコードを提示することは別に構わないのですが、tapiokazakiさんもやることをやってください。 >> インデント汚くてすいません。 > 質問はいつでも何度でも編集できるので、この質問から実践してください。 回答と同じような体裁になるはずです。 [3-7. Markdownを利用しましょう](https://teratail.com/help/question-tips#questionTips37)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問