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

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

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

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

Processing

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

Q&A

1回答

2218閲覧

Processing-色の変化(1度だけ点滅)-

Haru_330

総合スコア0

Java

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

Processing

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

0グッド

0クリップ

投稿2020/07/15 04:44

編集2020/07/15 13:01

前提・実現したいこと

キーを押すと、順番に光る(色が変化)機能を実現させたい。
https://gamebox.gesoten.com/zakzak/game/265
このURLのような感じのゲームを作っています。
7/19までに提出のファイルのため、できれば早い回答を望みます。
無理そうだったら別の案を考えます。

発生している問題・エラーメッセージ

色は変化するが、一番最初の画面にも表示されてしまい、うまく行かない。
また、順番に変化させることができない。(時間差で変化させたい。)

該当のソースコード

saisyonotabu

1void setup() { 2 background(255); 3 size(500, 690); 4 fill(0); 5 textAlign(CENTER, TOP); 6 textSize(50); 7 text("Tap to key'1'", width/2, height/2-30); 8 text("EXIT,'esc'key", width-180, height-70); 9 music(); 10 flag=0; 11 fla=0; 12} 13 14void draw() { 15 tikatika2(); 16tikatika3(); 17}
void Clear(){ if(flag==0){ background(255,255,255); fill(0); textSize(50); text("GAME CLEAR", width/2, height/2-50); } }
void Over(){ if(flag==0){ background(255,255,255); fill(0); textSize(50); text("GAME OVER", width/2, height/2-50); } }
void Play() { if(flag==0){ background(0, 255, 255); fill(255); rect(22.5, 10, width/2, 80); rect(295, 10, 80, 80); rect(397.5, 10, 80, 80); rect(22.5, 150, 120, 120); rect(22.5, 330, 120, 120); rect(22.5, 510, 120, 120); rect(190, 150, 120, 120); rect(190, 330, 120, 120); rect(190, 510, 120, 120); rect(357.5, 150, 120, 120); rect(357.5, 330, 120, 120); rect(357.5, 510, 120, 120); fill(0); text("1", width-65, 25); text("brain limit", 148, 25); } }
void STAGE1(){ if(flag==0){ background(255); Play(); fill(0); textSize(50); text("STAGE 1", width/2, height/2-100); text("'3'key START",width/2,height/2); } }
void keyPressed() { switch(key) { case '1': STAGE1(); flag=0; fla=0; break; case '2': Clear(); flag=0; fla=0; break; case '3': Play(); flag=1; fla=1; break; case '4': Over(); flag=0; fla=0; break; case'5': blinking(); flag=0; fla=0; break; case'6': reproduction(); flag=0; fla=0; break; default: } }
void mousePressed() { if (22.5<mouseX&&mouseX<142.5&&150<mouseY&&mouseY<270) { reproduction(); song2(); } else if (357.5<mouseX&&mouseX<477.5&&330<mouseY&&mouseY<450) { Clear(); song2(); } else { Over(); song2(); } }
void stop() { song1.close(); //サウンドデータを終了 minim.stop(); super.stop(); } void music() { minim = new Minim(this); //初期化 song1 = minim.loadFile("bgm.mp3"); //bgm.mp3をロードする song1.play(); //再生 } void song2() { minim = new Minim(this); //初期化 song2 = minim.loadFile("clickmusic.mp3"); song2.play(); //再生 song2.rewind(); //再生が終わったら巻き戻しておく }
int flag=0;//0のときはfillの値を直さない。(元のまま)1のときは、fillの値を変えるとき。 int fla=0; void tikatika2() { if (flag==0) { fill(255); } else { //rprintln(flag); fill(0); flag=0; } //println(flag); //noStroke(); rect(22.5, 150, 120, 120); } void tikatika3() { if (flag==0&&fla==0) { fill(255); } else { //println(fla); fla=0; fill(0); } //println(fla); //noStroke(); rect(357.5, 330, 120, 120); }

試したこと

tikatika2()とtikatika3()のタブの移動。

補足情報(FW/ツールのバージョンなど)

Processingの最新バージョンを使っています。

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

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

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

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

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

thkana

2020/07/15 12:49

ソースも不完全なのに、「一番最初の画面」とか「順番」とか言われても何が何やらわかりませんが。
Haru_330

2020/07/15 13:04

すみません。修正しました。 一番最初の画面は、void setupで行われる処理のことです。 その上にvoid drawの中の処理が行われてしまっています。 void drawが何回も行われる処理だということはわかっているんですが、void drawの中にいれないとうまく行かないので、どうすればいいのかと思い、質問させていただきました。 順番は、色が変化する順番です。 これは、tikatika2(),tikatika3()を見ていただければわかるかと思います。 わかりづらくてすみません。 よろしくおねがいします。
thkana

2020/07/15 13:09

関数毎にProcessingのIDEのタブを分けているのですか? ちょっと見通しが悪くなりませんか?
thkana

2020/07/15 13:18

blinking()とreproduction()とが足りませんね。 あと、minimで音を出す部分は、ファイルが無いとエラーになるので面倒です。 言葉での説明が出来なくてソースに語らせるのはそれはそれでありとは思いますが、それならば語ってくれるだけのソースを提示して下さい。 それと、あなたが問題と考える現象の再現手順と。 できれば https://teratail.com/help/question-tips#questionTips3-5-1 「最も良いのは、現象を再現するためのミニマムなプログラムを改めて作ること」です。
Haru_330

2020/07/15 13:27

ありがとうございます とりあえず、ミニマムなものを作ってみてまた違うもので質問します。 blinkingと、reproductionは、あまり使っていない部分だったので入れませんでした。申し訳ないです。 タブに関しては、大学でわかりやすくした方がいいと言うのと、1個のタブが長くなりすぎてはダメという方針だったので、そうしました。 色々ありがとうございます。 自分でもうすこし頑張ってみてからまた質問します。
guest

回答1

0

質問のプログラムの方針がイマイチ見えなかったので勝手に作ってみた。参考まで。ボタンはクラスにしたい気もしたけど、「習ってない」とかいわれそうでやめた。

教えすぎ? まぁ、先は長そうだし。

Processing

1final color NORMALCOLOR=color(255); 2final color BRIGHTCOLOR=color(255, 0, 0); 3 4//ボタン配置のための変数群 5float buttonSize; 6float border; 7float top; 8 9int[] pos=new int[9+1];//光らせる位置を保持。負は無効 10int frame0=30;//ボタンを変える時間間隔 11int frameCnt;//時間測定のための変数 12int index;//何番目かを保持 13 14enum Mode {//全体の動作のモード 15 START, 16 SHOW_PATTERN, 17 ASK_PATTERN, 18 PATTERN_DONE, 19 GAME_OVER 20} 21Mode mode=Mode.START;//現在のモードを保持 22 23void setup() { 24 size(300, 500); 25 buttonSize=width/3*0.8; 26 border=width*0.2/4; 27 top=height-width; 28} 29 30void drawButtons(int bright) {//指定場所だけ色を変えてボタンを表示。負は無効 31 for (int y=0; y<3; y++) { 32 for (int x=0; x<3; x++) { 33 if (x+y*3==bright) { 34 fill(BRIGHTCOLOR); 35 } else { 36 fill(NORMALCOLOR); 37 } 38 square(x*buttonSize+(x+1)*border, top+y*buttonSize+(y+1)*border, buttonSize); 39 } 40 } 41} 42 43void createPositions(int n) {//ボタン位置順番を生成 44 int i; 45 for (i=0; i<n; i++) { 46 pos[i]=(int)random(9); 47 } 48 pos[i]=-1; 49} 50 51void draw() { 52 background(204); 53 switch(mode) { 54 case START: 55 fill(0); 56 textAlign(CENTER, CENTER); 57 textSize(24); 58 text("Hit '1' key to START", width/2, height/2); 59 if (keyPressed && key=='1') { 60 createPositions(5);//解答生成 61 index=0;//最初から 62 frameCnt=frame0;//時間を設定 63 mode=Mode.SHOW_PATTERN;//パターン表示へ 64 } 65 break; 66 case SHOW_PATTERN: 67 if (frameCnt-->0) {//drawは1/frameRate秒に1回実行されるのでその回数を数えることで「間」を作る 68 drawButtons(pos[index]); 69 } else { 70 frameCnt=frame0;//時間を設定 71 index++;//次のパターン 72 if (pos[index]<0) {//終わり? 73 mode=Mode.ASK_PATTERN;//解答入力へ 74 } 75 } 76 break; 77 } 78}

投稿2020/07/15 15:26

thkana

総合スコア7703

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

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

Haru_330

2020/07/16 01:57

ありがとうございます!! どういう原理か解読して、勉強したいと思います。 解決しましたら、また連絡します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問