スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Processingを実行したら動作が重かったので修正したときの覚書

Processingで引き続きシステムを作っています。
今回、

マウスで画面上に配置されたボタンをクリックする→テキストエリアに文字列が表示される

というシステムを作ってデモを行っていました。

が、実行してみると何故か挙動がおかしい。
具体的にいうと、一回目にボタンを押したときだけレスポンスが妙に遅い。
二回目以降は迅速なレスポンスが返ってくるのに…。

別のプログラムでサーバーを立て、クライアントとしての動作もさせていたので通信部分の不具合化と思いいろいろ試しましたが直りません。
30分程悩んでいたところ、なんとか原因が究明できました。

ボタンを押したときに文字列を書き込む。ここが問題でした。
一回目にボタンを押したとき、初めて文字を使用することになります。
すなわち、フォントの設定などの処理が初めてボタンが押された瞬間に行われていたようです。
そのため、最初の一回のみ処理が多くなり、まるでフリーズしたかのような挙動になってしまっていたのですね。

setup()の処理の中であらかじめ開始の合図の文字列を表示させておいたところ、ボタンはきちんと動作するようになりました。
同じ現象を再現できたので、サンプルを貼っておきます。
前回のボタンのサンプルの1_1、1_2と同じ素材を使用しています。


PImage button1_1,button1_2;

boolean flag1 = false;

void setup(){
size(400,450);
button1_1 = loadImage("button1_1.png");
button1_2 = loadImage("button1_2.png");
//text("button Released!",100,200); //<---1
image(button1_1,50,50);
}

void draw(){}

void mousePressed(){
if(mouseX >= 50 && mouseX <= 350 && mouseY >= 50 && mouseY <= 150){
flag1 = true;
println("Button Pressed!");
image(button1_2,50,50);
}
}

void mouseReleased(){
if(flag1 == true && mouseX >= 50 && mouseX <= 350 && mouseY >= 50 && mouseY <= 150){
println("Button Released!");
text("button Released!",100,200); //<---2
}
flag1 = false;
image(button1_1,50,50);
}


コメントで1、2と書いてある部分が今回の問題の原因となったコードです。
このまま実行すると、2の部分でボタンを押した一回目の処理が遅くなることがわかります。
そこで、1の部分のコメントアウトを外してみましょう。
setup()の中でフォントの読み込みの処理が行われ、ボタンの動作には影響しなくなります。

通信部分のバグだと思い込んでいたので、目から鱗でした。
フォントの読み込みのタイミングには気をつけましょう。

それでは、今回はこの辺りで。
関連記事

コメント

非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。