課題ということなのでヒントにとどめます。
ヒントが足りなければ追記しますので、コメントしてください。
pngのRGBはイラレでしっかり指定して作ってあります。
添付画像がpic.png
であれば、どう見てもcolor(255,0,0)
やcolor(0,0,255)
はありません。
Processing
1println(hex(get(mouseX, mouseY), 6));
とすると16進でff0000のように表示して確認できます。
color(255,0,0)
の代わりに#ff0000
のような表記もできるので、if文を画像の色に合わせましょう。
hex() \ Language (API) \ Processing 3+
color \ Language (API) \ Processing 3+
下手に書き換えられず宣言している変数で使っていない変数もあります。
(イライラ棒の跡形もないので)もうすでにかなり書き換えてると思うのですが、このコード量なら変数を使っているかどうかは一目では?
例えばfinal int STANDBY = 0;
を削除します。
もしどこかで使われている変数なら、実行ボタンを押したときにエラーになります。
エラーになったら元に戻せばいいだけです。
こうした方がスッキリするなどのご意見も欲しいです。
それ以前にやりたいことにコードがなっていません。
Processing
1startTime = millis();
2finishTime= millis()-startTime;
これはどういうつもりで書いたのでしょう?
スタートするのは赤ボタンを押したときですよね?
setup()
(プログラム開始)時の値をとっても仕方ありません。
finishTime
もmillis()-millis()
になるわけですから結局0です。
Processing
1text((millis()-startTime)*0.001,256,260);
ここの意図もわかりません。赤を押したときに何か表示するんですか?
Processing
1text(finishTime*0.001,256,260);
ここの気持ちはわかります。
しかしfinishTime
は0です。青ボタンを押したとき(if文の中)に、finishTime
を計算する必要があります。
あと2点
文字色は今のままでは白です。
text() \ Language (API) \ Processing 3+
fill() \ Language (API) \ Processing 3+
mousePressed()
で文字を書きますが、すぐdraw()
に入ってしまい画像で上書きされて消えてしまいます。
簡単にやるならループを止めることです。
noLoop() \ Language (API) \ Processing 3+
全体コードを追記
_
になっている部分を埋めてください。
Processing
1int startTime;
2PImage pic;
3
4void setup() {
5 size(512, 512);
6 pic = loadImage("pic.png");
7 textSize(50);
8 fill(0); // 塗りつぶし色(文字色)黒
9}
10
11void draw() {
12 image(pic, 0, 0);
13}
14
15void mousePressed() {
16 println(hex(get(mouseX, mouseY), 6)); // 717272 や FFFFFF 等
17
18 if (get(mouseX, mouseY) == #______) { // 赤ボタンを押したとき #FF0000 等確認した色を入れる
19 startTime = millis(); // startTimeを記録
20 loop(); // 再チャレンジ時のためにループを再開
21 }
22
23 if (get(mouseX, mouseY) == #______) { // 青ボタンを押したとき #0000FF 等確認した色を入れる
24
25 // 先に赤ボタンを押してなければ青ボタンは押せない(赤を押したときに変えた変数は?)
26 if(_________ == 0) return;
27
28 // finishTimeの計算(finishTimeはここでしか使わないのでローカル変数でよい)
29 int finishTime = millis() - startTime;
30 text(finishTime * 0.001, 256, 260); // 位置が全然合ってない
31 noLoop(); // ループを止める
32 }
33}