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

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

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

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

Q&A

解決済

2回答

834閲覧

Processing マウスでできた描画を残したまま新しい描画を作成する方法

huruhuru

総合スコア4

Processing

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

1グッド

0クリップ

投稿2022/06/17 00:37

Processingでマウスを使って描画をするプログラムを作っています。
その際1つの描画ができた後に新しい描画を描くと前の描画が消えてしまいます。
どのようにすれば残像を残したまま新しい描画を描けますか?

int count; float cx = 0; float cy = 0; boolean mode = false; void setup(){ size(500,500); background(255); frameRate(50); count = 0; } void draw(){ for(int i=0;i<50;i++){ for(int j=0;j<50;j++){ float x = 1 + 10*i; float y = 1 + 10*j; if(dist(cx,cy,x,y)<count){ fill(255,100,0); }else{ fill(0); } rect(x,y,8,8); } } if(mode){ count++; } } void mousePressed(){ cx = mouseX; cy = mouseY; count = 0; mode = true; } void mouseReleased(){ mode = false; }
TN8001👍を押しています

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

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

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

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

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

TN8001

2022/06/17 09:13

> わかりやすい説明ありがとうございました。 解決したのであれば解決済みにしてください。 不明点(不満点?)があれば、それぞれの回答にコメントしてください。 「ほかの(方の)回答ももう少し見てみたい」のような場合は、質問に何か注記がないとそうそう回答されません(teratailはすでにある回答で十分だろうと思われる場合は、回答を重ねない傾向が強いです)
guest

回答2

0

ベストアンサー

その際1つの描画ができた後に新しい描画を描くと前の描画が消えてしまいます。
どのようにすれば残像を残したまま新しい描画を描けますか?

単に黒く塗るのをsetupに持っていくだけでいいのでは?(今後どうなっていくかにもよるでしょうが)

クリックした場所によって微妙にゆがむのが気になったので、cxcyをマスサイズに調整しました(余計なお世話だったらすいません^^;

Processing

1int count; 2int cx; 3int cy; 4boolean mode; 5 6void setup() { 7 size(500, 500); 8 frameRate(50); 9 background(255); 10 fill(0); 11 for (int y = 0; y < height; y += 10) { 12 for (int x = 0; x < width; x += 10) { 13 square(x + 1, y + 1, 8); 14 } 15 } 16} 17 18void draw() { 19 if (!mode) { 20 return; 21 } 22 23 fill(255, 100, 0); 24 for (int y = 0; y < height; y += 10) { 25 for (int x = 0; x < width; x += 10) { 26 if (dist(x, y, cx, cy) < count) { 27 square(x + 1, y + 1, 8); 28 } 29 } 30 } 31 count++; 32} 33 34void mousePressed() { 35 cx = mouseX / 10 * 10; 36 cy = mouseY / 10 * 10; 37 count = 0; 38 mode = true; 39} 40 41void mouseReleased() { 42 mode = false; 43}

アプリ動画

投稿2022/06/17 04:06

編集2023/08/16 04:00
TN8001

総合スコア9321

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

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

huruhuru

2022/06/17 04:53

わかりやすい説明ありがとうございました。
guest

0

いろいろな方法がありそうですが、
一度塗ったマス目を覚えておいて、次の draw でも塗るようにすればよさそうです。

boolean [] flag = new boolean[50*50]; //★ void draw(){ for(int i=0;i<50;i++){ for(int j=0;j<50;j++){ float x = 1 + 10*i; float y = 1 + 10*j; if(flag[i*50+j] || dist(cx,cy,x,y)<count){ // ★ fill(255,100,0); flag[i*50+j] = true; //★ }else{ fill(0); } rect(x,y,8,8); } } if(mode){ count++; } }

投稿2022/06/17 02:46

sigsegv

総合スコア895

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

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

huruhuru

2022/06/17 04:53

わかりやすい説明ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問