processing
1 2PImage img; 3PrintWriter output; 4String filename = nf(year(),4) + nf(month(),2) + nf(day(),2) + nf(hour(),2) + nf(minute(),2) ; 5 6int ratio = 1; //サイズ比率 7int angle; 8int direction; 9int baseTime; 10int response; 11int RT; 12 13int i = 0; 14 15boolean isDebug; 16int numTrial; 17 18int state; 19int currentTrial; //実験が現在何試行目を実行中かを保持 20PFont font; 21 22void setup(){ 23background(128); //灰色); 24size( 600, 600 ); 25frameRate(30); 26noStroke(); 27 28state = 0; 29baseTime = millis(); 30response = 0; 31RT = 0; 32 33textFont( createFont( "Georgia", 28 ) ); 34output = createWriter( filename + ".txt" ); 35 36} 37 38void draw(){ 39//for(int i=0; i < 3; i++){ 40if( state == 0 ){ 41titlePhase(); 42} 43else if( state == 1 ){ 44waitPhase(); 45} 46else if(state == 2){ 47responsePhase();{ 48baseTime = millis(); // 削除するとインターバル時間を取れなくなる 49} 50} 51else if(state == 3){ 52endPhase(); 53} 54} 55 56 57void titlePhase(){ 58//background(0,0,255); //青 59background(255,255,255); //白 60fill(255,0,0); 61textSize(36); 62text("START", 250, 225); // 表示するテキスト, x座標, y座標 63 64int elapsedTime = millis() - baseTime; 65if( elapsedTime > 3000 ){ 66state = 1; 67} 68 69} 70 71void waitPhase(){ 72//background(255,128,128); //ピンク 73background(255,255,255); //白 74// check elapsed time to transit state 75int time1 = millis() - baseTime; 76if( time1 > 3000 ){ 77transitState(); 78} 79} 80 81void responsePhase(){ 82 83background(255,255,0); //黄色 84noLoop(); 85img = loadImage("image1.png"); 86imageMode(CENTER); 87 88int direction = (int)random(4); 89if (direction == 0) { 90angle = 0; 91} else if (direction == 1) { 92angle = 90; 93} else if (direction == 2) { 94angle = 180; 95} else if (direction == 3){ 96angle = 270; 97} 98ratio = (int)random(1,5);//サイズ 1倍から5倍までのランダム 99 100pushMatrix(); 101translate(width/2, height/2); 102rotate(radians(angle)); 103scale(ratio); 104image(img, 0, 0); 105popMatrix(); 106 107} 108 109 110void endPhase(){ 111//background(0,0,255); //青 112background(255,255,255); //白 113fill(255,0,0); 114textSize(36); 115text("FINISH", 250, 225); // 表示するテキスト, x座標, y座標 116} 117 118void transitState(){ 119if( state == 1 ){ 120redraw(); 121state = 2; 122} 123else { 124if( currentTrial == numTrial - 1 ){ 125state = 2; 126} 127else { 128currentTrial++; 129state = 1; 130} 131} 132} 133 134void keyPressed(){ 135 136if (key == ENTER || key == RETURN){ 137if( state == 0 ){ 138state = 1; 139} 140} 141 142if( key == 'q' ){ 143output.flush(); 144output.close(); 145exit(); 146} 147 148if (keyPressed == true){ 149 150if(i < 3){ 151if( state == 2 ){ 152loop(); 153state = 1; 154i = i+1; 155} 156if (i >= 3){ 157 state = 3; 158 //endPhase(); 159} 160} 161} 162 163switch(keyCode) { 164 165case UP: 166if (angle == 0) { 167 168println ("↑ hit" +" "+ (millis() - baseTime)); 169output.println("↑ hit" +" "+ (millis() - baseTime)); 170} 171 172else { 173println ("↑ miss" +" "+ (millis() - baseTime)); 174output.println("↑ miss" +" "+ (millis() - baseTime)); 175} 176break; 177 178case RIGHT: 179if (angle == 90) { 180println ("→ hit" +" "+ (millis() - baseTime)); 181output.println("→ hit" +" "+ (millis() - baseTime)); 182} 183else { 184println ("→ miss" +" "+ (millis() - baseTime)); 185output.println("→ miss" +" "+ (millis() - baseTime)); 186} 187break; 188 189case DOWN: 190if (angle == 180) { 191println ("↓ hit" +" "+ (millis() - baseTime)); 192output.println("↓ hit" +" "+ (millis() - baseTime)); 193} 194else { 195println ("↓ miss" +" "+ (millis() - baseTime)); 196output.println("↓ miss" +" "+ (millis() - baseTime)); 197} 198break; 199 200case LEFT: 201if (angle == 270) { 202println ("← hit" +" "+ (millis() - baseTime)); 203output.println("← hit" +" "+ (millis() - baseTime)); 204} 205else { 206println ("← miss" +" "+ (millis() - baseTime)); 207output.println("← miss" +" "+ (millis() - baseTime)); 208} 209break; 210} 211} 212 213 214void mousePressed(){ //マウスクリックでスタート 215if (mousePressed == true){ 216if( state == 0 ){ 217state = 1; 218} 219} 220}
お世話になります
以下のような動作をprocessingで行おうとして参考になる資料が見つからず詰まっております。
ご助言いただけないでしょうか。
- processingで矢印の大きさが異なる画像を5枚用意する。
- UP,DOWN,RIGHT,LEFT の4方向に画像を上記の5枚の画像を回転させる。
- 回転は任意の方向にメニューを作って1枚づつredrawでインターバルを2秒とって順番に表示させる。
- 任意の回転メニューは3パターン用意する。
添付のコードは以前教えていただいたものを作りなおして、
エンターでスタート後、2秒ごとにランダムに矢印を表示して当たり判定をする内容になっております。
これを改修して今回質問の内容に持って行けないかと思っております。
あなたの回答
tips
プレビュー