Processingで右から左に連続で途切れることなく文字を表示するにはどうしたらいいでしょうか。
お店の宣伝で使われている電光掲示板のように”EIGHTEIGHTEIGHT…”と繰り返し永久に文字が流れるようにしたいです。
float x;
PFont font;
String msg = "EIGHT";
float speed = -1;
void setup() {
size(400, 200);
font = loadFont("Calibri-BoldItalic-48.vlw");
textFont(font);
textSize(32);
x = width;
}
void draw() {
background(255);
fill(0);
float msgWidth = textWidth(msg);
text(msg, x, height/2);
x = x+speed;
}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
for文を使って同じ処理を繰り返してみるのはいかがでしょうか。
参考文献記載しておきます。
繰り返しループ
投稿2019/06/04 15:00
総合スコア479
0
ベストアンサー
追記:最初の回答は質問意図をつかめてなかったため追記の形でコメントします。
まずはウィンドウの幅いっぱいに"EIGHT"を並べる処理を書いてみてください。動かすのはその後で考えましょう。
前回の回答に書いた考え方(各関数や変数が何を意味しているか)も参考になるのではないでしょうか?繰り返し処理についてはices_sinonさんが記述例と実行例が載っているページを紹介してくださってます。そのあたりも参考にしながら考えてみてください。
以下は元の回答
連続で途切れることなく
この正確な意味がはっきりわかりませんが、「画面左端から消えたら再び右から出現する」ということでよいなら、xがある限界より小さくなったときに再度右端の座標に設定しなおせばよいです。
text(msg, x, ...)
としていることから変数x
はテキストの左端の座標であることがわかります。msg
はx
からx + msgWidth
の区間に表示されるのですが、ウィンドウの座標は左端が0、右端がwidthとなりますので、テキストが画面左側から消えるときのx
の値は-msgWidth
になるはずです。
よって以下のようにすればよいでしょう。
processing
1... 2 3void draw() { 4 ... 5 x = x + speed; 6 7 // ここで以下の処理を追加 8 if (x < -msgWidth) { 9 x = width; 10 } 11}
投稿2019/06/04 18:00
編集2019/06/05 13:26総合スコア18404
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/05 15:10
2019/06/05 21:43

0
KSwirdOfHasteさんのコメント欄のネタ。元の質問と関係ないわけでもないので解答欄で書いておきます。
PFontのサイズ(ファイル生成が面倒なのでcreateFontでやってます。これの影響の有無は確認していないのですが...)とtextSizeが異なると「カクカク」します。
ご参考まで。
Processing
1float x; 2PFont font; 3String msg = "EIGHT"; 4float speed = -1; 5String msgLine=""; 6float msgWidth; 7 8void setup() { 9 size(400, 200); 10 //font = loadFont("Calibri-BoldItalic-48.vlw"); 11 font = createFont("Calibri Bold Italic",48);//2番めのパラメータを32にするとカクカクしない 12 textFont(font); 13 textSize(32); 14 x = width; 15 msgWidth=textWidth(msg); 16 for(int i=0;i<(int)(width/msgWidth)+2; i++){ 17 msgLine+=msg; 18 } 19} 20 21void draw() { 22 background(255); 23 fill(0); 24 text(msgLine, x, height/2); 25 x = x+speed; 26 if(x<-msgWidth){ 27 x=0; 28 } 29}
投稿2019/06/05 21:43
編集2019/06/05 21:44総合スコア7723
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/06 01:19

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/05 14:37