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

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

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

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

Q&A

1回答

2269閲覧

processingの文字色を変えたい

Nightmare8795

総合スコア0

Processing

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

0グッド

0クリップ

投稿2022/07/18 05:00

processingで文字列からcharAt()メソッドで呼び出した文字の色を
時間で変化させたいのですがよくわかりません。

fillの変数(i)に数値を加算して変化させようとしたところ
文字列の長さが変わってしまいます。
うまくできないので修正をお願いしたいです。よろしくお願いします。

String s = new String("All is well that ends well."); int x; void setup(){ size(400, 100); textFont(createFont("Harrington", 24)); colorMode(HSB, s.length() - 1); } int dh = 1; void draw(){ background(s.length() - 1); int offset = 0; for(int i = 0; i < s.length(); i++){ fill(i, s.length() - 1, s.length() - 1); text(s.charAt(i), (width - textWidth(s)) / 2 + offset, height / 2); offset += textWidth(s.charAt(i)); i += dh; } }

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

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

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

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

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

guest

回答1

0

processingで文字列からcharAt()メソッドで呼び出した文字の色を
時間で変化させたいのですがよくわかりません。

「グラデーションを流れるように変化させる」といった感じでしょうか。

今のところ時間で変化する要素がありません。
dhも常に1ですし、ほかの変数の変化も一定です。

時間で変化する変数はframeCountがありますから、それを使いましょうか。

fillの変数(i)に数値を加算して変化させようとしたところ
文字列の長さが変わってしまいます。

i += dh;ここのところの話でしょうか。
iはループに使う変数ですからいじってはいけません。
fillに入れる値だけをいじります(わかりにくかったら別の変数を作ります)

fill(i + frameCountとすると、時間が経つほど大きくなっていきます。
しかし大きくなりすぎてしまうので、剰余(%)を使って制限します。

これで流れるようにはなりました。しかし右から左に流れて見えます。
左から右にするには引き算に変えますが、マイナスにならないように調整する必要があります。

println等で予定通りの値になっているか、確認しながら式を完成させましょう^^

Processing

1String s = "All is well that ends well."; 2int max = s.length() - 1; 3 4void setup() { 5 size(400, 100); 6 frameRate(5); 7 textFont(createFont("Harrington", 24)); 8 colorMode(HSB, max, 1, 1); 9} 10 11void draw() { 12 background(max); 13 14 int offset = 0; 15 for (int i = 0; i < s.length(); i++) { 16 //int h = (i + frameCount) % max; // <<< 17 int h = (max + i - (frameCount % max)) % max; // >>> 18 //int h = (max + frameCount - i) % max; // 色の順番にこだわりがなければこれでも 19 //println(i, h); 20 21 fill(h, 1, 1); 22 text(s.charAt(i), (width - textWidth(s)) / 2 + offset, height / 2); 23 offset += textWidth(s.charAt(i)); 24 } 25}

アプリ動画

投稿2022/07/18 08:21

編集2023/07/30 11:59
TN8001

総合スコア10011

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

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

Nightmare8795

2022/07/18 15:13

詳しい解説付きの回答ありがとうございます。助かりました。
TN8001

2022/07/18 15:40

> 詳しい解説付きの回答ありがとうございます。助かりました。 動作確認も取れて疑問点も特になければ、質問を「解決済」にしてください^^ [ヘルプ > 質問を解決済みにしたい](https://teratail.com/help#resolve-question)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問