🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

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

Q&A

解決済

2回答

1071閲覧

赤ボタンを押してから青ボタンを押すまでの時間を表示したい

Red_yejil

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

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

1グッド

0クリップ

投稿2021/02/02 12:45

編集2021/02/02 15:52

赤ボタンを押してから青ボタンを押すまでのタイムを枠内に表示するプログラムを作りたいです。最新のProcessingで作業しています。
この状態だとエラーメッセージは出ないのですが、表示されるのは、ボタンを押しても反応しないpngだけです。
pngのRGBはイラレでしっかり指定して作ってあります。

大学の選択授業の自由課題で、プログラミングの専攻でもなく、ど初心者なので詳しく教えてもらえると大変嬉しいです。どうか添削よろしくお願いいたします。
授業で配布されたイライラ棒の見本コードがあって、それを書き換えながら行っているので、下手に書き換えられず宣言している変数で使っていない変数もあります。

こうした方がスッキリするなどのご意見も欲しいです。

該当のソースコード

final int STANDBY = 0;
final int GAMESTART = 1;
final int GAMEFINISH = 2;
int state = STANDBY;
int startTime;
int finishTime;
PImage pic;

void setup(){
size(512,512);
pic = loadImage("pic.png");
textSize(50);
startTime = millis();
finishTime= millis()-startTime;
}

void draw(){
image(pic,0,0);
}

void mousePressed(){
if(get(mouseX,mouseY)==color(255,0,0)){
text((millis()-startTime)0.001,256,260);
}
if(get(mouseX,mouseY)==color(0,0,255)){
text(finishTime
0.001,256,260);
}
else{
}
}

イメージ説明

TN8001👍を押しています

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

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

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

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

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

thkana

2021/02/02 13:36

javascriptは関係ないです。
Red_yejil

2021/02/02 13:48

どちらかわからなくて、どちらもタグに書いてしまいました。混乱させてしまい申し訳ございません。
thkana

2021/02/02 14:15

では修正して下さい。質問やタグは編集できます。
Red_yejil

2021/02/02 14:29

訂正しました。 不慣れで申し訳ありません。
guest

回答2

0

ベストアンサー

課題ということなのでヒントにとどめます。
ヒントが足りなければ追記しますので、コメントしてください。

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()(プログラム開始)時の値をとっても仕方ありません。
finishTimemillis()-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}

投稿2021/02/02 14:29

編集2022/09/18 18:19
TN8001

総合スコア9855

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

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

Red_yejil

2021/02/02 15:33

int startTime; int finishTime; PImage pic; void setup(){ size(512,512); pic = loadImage("pic.png"); textSize(50); } void draw(){ image(pic,0,0); noLoop(); } void mousePressed(){ if(get(mouseX,mouseY)==color(255,0,0)){ startTime = millis(); } } void drawText(){ fill(0); if(get(mouseX,mouseY)==color(0,0,255)){ finishTime=millis()-startTime; text(finishTime*0.001,256,260); } } 丁寧なご指摘本当にありがとうございます。リンクなども貼ってくださり非常にわかりやすいです。 知識がないながら、ご指摘されたところを一通りやり直してみました。 エラーは出ていないのですが、やはり表示されません。 他サイトなども見たのですが、2つ理解しきれていないところがあって、 ①millis()が完全に理解できていなくて、最後のfinishTime=millis()-startTime;がまた0になっているのでは?と思うのですが、解決策がわかりません。 ②ループを止めないといけないとのことですが、何かアクションが起きるたびに画像が上書きされるから、画像のループを止めるということですか? 初歩的な質問であれば大変申し訳ないです。 他にも間違っているところがあれば教えていただけると嬉しいです。
TN8001

2021/02/02 16:02

> やはり表示されません。 イラストレーターのデータがどうであれ、提示画像にはcolor(255,0,0)になっている色はないんです。 color(255,0,0)はもっとどぎつい赤です。 printlnして実際の数値を確認してください。 ① millis()はプログラム開始時からのミリ秒です。 [millis() \ Language (API) \ Processing 3+](https://processing.org/reference/millis_.html 時間が経つほど増えますから 青を押したとき 引く 赤を押したとき でいいでしょう(あっています) ② void draw() は1秒間に60回呼ばれます。noLoop();すると呼ばれなくなります。 青を押したとき(mousePressed())に文字を書く(text())のはいいのですが、すぐにdraw()が来てしまうので書いた文字が消えてしまうということです。 文字を書いたときに止めればいいのです(基本止めておく方針もありますが、Processing的にはあまりやりません) ほぼコード的には出そろったようですので、全体コードを追記しました。
Red_yejil

2021/02/03 07:01

こんにちは、お返事遅くなってしまいすみません。 おかげでできました。 画像も差し替えさせていただきました。 ①、②もわかりやすい回答ありがとうございます。 本当にお世話になりました、何もわかっていない私に丁寧に教えてくれてありがとうございました。 nt startTime; PImage pic; void setup() { size(512, 512); pic = loadImage("pic.png"); textSize(40); fill(0); // 文字色黒 } void draw() { image(pic,0,0); } void mousePressed() { println(hex(get(mouseX, mouseY), 6)); if (get(mouseX, mouseY) == #FF0000) { // 赤ボタンを押したとき startTime = millis(); // startTimeを記録 loop(); // 再チャレンジ時のためにループを再開 } if (get(mouseX, mouseY) == #0000FF) { // 青ボタンを押したとき // finishTimeの計算 int finishTime = millis() - startTime; text(finishTime * 0.001, 190, 247); noLoop(); // ループを止める // 先に赤ボタンを押してなければ青ボタンは押せない if(startTime == 0) return; } } 完成コードも貼っておきます。本当にありがとうございます。
TN8001

2021/02/03 07:14

実行後に青ボタンを先に押されるとちょっと変になります(まあ細かい突込みですが^^; if (startTime == 0) return;の位置の問題です。
guest

0

大学の選択授業の自由課題で、プログラミングの専攻でもなく、ど初心者なので詳しく教えてもらえると大変嬉しいです

teratailをgoogleで調べると"ITエンジニア特化型Q&Aサイト"と出てくるんですけどね。あ、回答者が特化してればいいのか?

赤ボタンを押してから青ボタンを押すまでのタイム

全然そういう計算をしていません。赤ボタンを押した時の時間を記録し、青ボタンを押したときにその時間から赤ボタンを押した時の時間を引くと経過時間が求まります。

pngのRGBはイラレでしっかり指定して作ってあります。

まちがっています。クリックしたときのマウスカーソルの位置がR=255,G=0,B=0かR=0,G=0,B=255であったときに応答するプログラムになっていますが、ボタンの色がそうなっていません。

表示されるのは、ボタンを押しても反応しないpngだけです。

先の間違いがあるので反応しないのもありますが、そこを直したとしてもmousePressed関数でなにか表示したとして、draw()内で画像を描くことで覆い隠してしまっています。

投稿2021/02/02 14:14

編集2021/02/02 14:17
thkana

総合スコア7703

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

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

Red_yejil

2021/02/02 15:41

ご回答ありがとうございます。 teratailのことを詳しく知らずに質問してしまってすみません。他サイトがあることも知りませんでした。 画像は書き出しや指定はRGBだったのですが、IllustratorのドキュメントカラーモードがCMYKになっていたことが原因でした。ご指摘ありがとうございます。 もう少し調べてやってみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問