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

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

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

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

Q&A

解決済

1回答

1081閲覧

マウス操作で動作を開始して、自動で止まる(何秒で止まる、何回壁に当たったら止まるなどなど)というコード書くにはどこに何を書けばいいでしょうか。

yuunosu

総合スコア1

Processing

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

1グッド

0クリップ

投稿2021/11/11 05:52

編集2021/11/11 06:38
コード```int x=(int)random(640); int y=(int)random(480); int xdirection=1; int ydirection=1; int x2=(int)random(640); int y2=(int)random(480); int xdirection2=1; int ydirection2=1; int r1=(int)random(155)+100; int g1=(int)random(155)+100; int b1=(int)random(155)+100; int r2=(int)random(155)+100; int g2=(int)random(155)+100; int b2=(int)random(155)+100; void setup() { size(800, 800); colorMode(RGB, 255); background(255, 255, 255); } void mousePressed(){} void draw() { fill(255, 255, 255, 60); noStroke(); rect(0, 0, width, height); stroke(0, 0, 0); fill(r1, g1, b1); ellipse(x, y, 50, 50); frameRate(10); fill(r2, g2, b2); ellipse(x2, y2, 20, 20); frameRate(13); if (x>width) { xdirection=-1; r1=(int)random(155)+100; g1=(int)random(155)+100; b1=(int)random(155)+100; } if (x2>width) { xdirection2=-1; r2=(int)random(155)+100; g2=(int)random(155)+100; b2=(int)random(155)+100; } if (x<0) { xdirection=1; r1=(int)random(155)+100; g1=(int)random(155)+100; b1=(int)random(155)+100; } if (x2<0) { xdirection2=1; r2=(int)random(155)+100; g2=(int)random(155)+100; b2=(int)random(155)+100; } if (y>height) { ydirection=-1; r1=(int)random(155)+100; g1=(int)random(155)+100; b1=(int)random(155)+100; } if (y2>height) { ydirection2=-1; r2=(int)random(155)+100; g2=(int)random(155)+100; b2=(int)random(155)+100; } if (y<0) { ydirection=1; r1=(int)random(155)+100; g1=(int)random(155)+100; b1=(int)random(155)+100; } if (y2<0) { ydirection2=1; r2=(int)random(155)+100; g2=(int)random(155)+100; b2=(int)random(155)+100; } x=x+(xdirection*10); y=y+ydirection*10; x2=x2+xdirection2*10; y2=y2+ydirection2*10; } ```初心者です。課題でProcessingでコードを書いているのですが、マウス操作で動作を開始して、自動で止まる(何秒で止まる、何回壁に当たったら止まるなどなど)というコード書くにはどこに何を書けばいいでしょうか。困っています。 よろしくお願いします。
TN8001👍を押しています

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

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

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

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

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

y_waiwai

2021/11/11 06:28

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
1T2R3M4

2021/11/11 06:35

先生に確認すればいいのでは。
dodox86

2021/11/11 06:42

> どこに何を書けばいいでしょうか。困っています。 この理解状況ではすべて動く完動品のコードを回答する以外、無いです。そしてそれは丸投げです。初心者だからとか関係ありません。
thkana

2021/11/11 12:28

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11252348861 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12252352332 これはお友達かな? https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11252342121 https://teratail.com/help#posted-otherservice というこの掲示板のルールがあります。 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」の処置をしてください。
guest

回答1

0

ベストアンサー

マウス操作で動作を開始して、自動で止まる

開始・停止をどう書くか悩んでいるということでしょうか?

変数やif文がわかっていれば、さほど難しくはないのですが。。。
何か変数を用意して、例えば0だったらxyを増やさない(減らさない)とするとか(フラグにはbooleanがいいですが)

あるいは今回の目的なら、loop()noLoop()でもよさそうです。
loop() / Reference / Processing.org
noLoop() / Reference / Processing.org

何秒で止まる

millis()でプログラム開始時からのミリ秒が取れます。
millis() / Reference / Processing.org

動かし始めた時のミリ秒を取っておいて、今のミリ秒と比較すればいいでしょう。

何回壁に当たったら止まる

if文の中身はいいとして、条件部分も書けませんか?(だったらこのプログラムをどう書いたんでしょう??)
何一つわかってないということになってしまいますよ(先生もガッカリです)

わからないことは別に恥ずかしいことではありません(誰でも最初はわからなかったのですから)
しかし「わからない」を言い訳にして何もやらないんでは、「この人はやる気がないんだな」と思われてしまいます。

エラーになってもいいから「多分こんな感じ」というのを、(コードで)見せてもらわないと他人には伝わりません。


  • ボールはひとつに
    無駄に長くなるので^^;
  • xdirection(方向)の代わりに、vx(速度)に変更
    今後45度以外の角度にも対応できる。
  • 符号の反転は-1を掛ける
    if文2つをまとめられるようになった。
  • HSBモードを使用
    色相だけいじればよくなるので変数を減らせる。

colorMode() / Reference / Processing.org
Hue / Examples / Processing.org

Processing

1int x; 2int y; 3int vx = 10; 4int vy = 10; 5int hue = (int)random(255); 6 7int start; 8 9void setup() { 10 size(700, 500); 11 colorMode(HSB); 12 background(255); 13 14 x = (int)random(width); 15 y = (int)random(height); 16 17 noLoop(); 18} 19 20void mousePressed() { 21 start = millis(); 22 loop(); 23} 24 25void draw() { 26 fill(255, 60); 27 noStroke(); 28 rect(0, 0, width, height); 29 30 stroke(0); 31 fill(hue, 128, 255); 32 circle(x, y, 50); 33 34 if (x < 0 || width < x) { 35 vx *= -1; 36 hue = (int)random(255); 37 } 38 if (y < 0 || height < y) { 39 vy *= -1; 40 hue = (int)random(255); 41 } 42 43 x += vx; 44 y += vy; 45 46 47 if (5 * 1000 <= millis() - start) { 48 println("5秒経ったよ"); 49 noLoop(); 50 } 51 //if (10 <= なにか) { 52 // println("10回跳ね返ったよ"); 53 // noLoop(); 54 //} 55}

10回跳ね返ったら止まるようにしてみてください。

投稿2021/11/11 09:57

TN8001

総合スコア9851

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

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

yuunosu

2021/11/11 15:44

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問