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

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

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

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

Q&A

解決済

1回答

2033閲覧

processhingにて矢印画像を回転させた方向の正誤判定の方法をお教えください。

xiaraix

総合スコア5

Processing

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

0グッド

0クリップ

投稿2018/01/30 14:50

前提・実現したいこと

processingにて例えば矢印を書いた画像画像を用意して、ランダムに回転(回転方向は0度、90度、180度、270度)と縮小拡大をして、矢印の向いた方向とキーボードで入力した矢印の方向の当たりとはずれのようなことをしたくprocessingで記述を行っております。

ランダムに回転と縮小拡大はできているのですが、キーボードの当たり判定をどのように書けばいいのか試行錯誤しておりまして、お力添えをいただけないかと思っております。

また、そのあたり判定を1度に10回ほど計測させたいと思っております。

よろしくお願いいたします。

該当のソースコード

processing

PImage img;

int x ;
int y ;
int []z = {0,1,2,3};

void setup() {
size(600, 600);
img = loadImage("image1.png");
imageMode(CENTER);
frameRate(1);
}

void draw() {
background(255);

translate(width/2, height/2);

int x = (int)random(0, 271);
int y = (int)random(0,10);
while (((x!=0)&&(x!=90)&&(x!=180)&&(x!=270))||
((y!=1)&&(y!=2)&&(y!=3)&&(y!=4))){
x=(int)random(0, 271);
y=(int)random(0,10);
}

rotate(radians(x));
scale(random(y));
image(img,0,0);

if( keyPressed == true ){ switch(keyCode){ case UP: z[0] = 1; println( "↑が押された" ); break; case RIGHT: z[1] = 1; println( "→が押された" ); break; case DOWN: z[2] = 1; println( "↓が押された" ); break; case LEFT: z[3] = 1; println( "←が押された" ); break; } }

}

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問の意図が理解できてるかわかりませんが、1つの方向を向いている間に10回ほど当たり判定をしたいということでしょうか...?
その前提で書き直してみましたが、最初のコードだとフレームレートが1だったので、1回方向が変わるごとに1回しか当たり判定ができないことになります。
あと、zの配列が何に使われているかよくわからなかったので、角度が一致した時に当たり判定をするように変えました。
角度は適当なので、また画像を元にangleの値を変えてみて下さい。

質問の趣旨と違っていたらすみません。。

PImage img; int nextTime; int interval = 1000; //次に方向を変えるまでの時間(ミリ秒) float ratio = 1.0; //サイズ比率 int angle; void setup() { size(600, 600); img = loadImage("image1.png"); imageMode(CENTER); frameRate(30); nextTime = interval; } void draw() { background(255); int now = millis(); if (now >= nextTime) { int direction = (int)random(4); if (direction == 0) { angle = 0; } else if (direction == 1) { angle = 90; } else if (direction == 2) { angle = 180; } else { angle = 270; } println(now + " : " + direction); nextTime += interval; ratio = random(0.5, 2);//0.5倍から2倍までのランダム } pushMatrix(); translate(width/2, height/2); rotate(radians(angle)); scale(ratio); image(img, 0, 0); popMatrix(); } void keyPressed() { switch(keyCode) { case UP: if (angle == 0) { println("↑ hit"); } else { println("↑ miss"); } break; case RIGHT: if (angle == 90) { println("→ hit"); } else { println("→ miss"); } break; case LEFT: if (angle == 180) { println("← hit"); } else { println("← miss"); } break; case DOWN: if (angle == 270) { println("↓ hit"); } else { println("↓ miss"); } break; } }

投稿2018/01/30 17:54

nasymt

総合スコア39

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

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

xiaraix

2018/01/31 05:56 編集

nasymt様 アドバイスありがとうございます。 私の説明が至らないところがあり、追記させていただきます。 zの配列は キーボードのUP=0、RIGH=1、DOWN=3、LEFT=4 を考えて接いしてみたつもりなのですが、ちゃんとできておりません。 1.一回の実行で10回画像の方向の正誤判定を行いたい。 2.基準の画像は上を向いた矢印の画像(↑)をイメージ。 ランダム設定された画像を表示 → キーボードでUP,RIGHT,DOWN,LEFTいずれかを入力 3.画像の矢印の方向に対して正誤判定 4.最初に戻って画像表示を繰り返す 以下これからやってみようと思っている部分です。 5.画像表示とキー入力までの応答時間をmillis()で測る。 6.10回分の正誤判定と応答時間を外部のテキストに記録。 ということを考えております。 お教えいただいたデータでほぼ考えていたことが実現できておりました。 続きは自分なりに取り組んでみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問