// import processing.opengl.*; import ddf.minim.*; import ddf.minim.signals.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; // グローバル変数 float GRAVITY = 3.2; Minim minim; ButtonImages ButtonImageManager; PFont font; boolean is3DMode = false; float[] y, destY, z, destZ; Scene[] scene; void setup() { size(640, 480, P3D); background(0); frameRate(30); font = loadFont("font.vlw"); textFont(font); // 音声関連の初期化 minim = new Minim(this); ButtonImageManager = new ButtonImages(); scene = new Scene[4]; scene[0] = new Scene("kuka"); scene[1] = new Scene("horba"); scene[2] = new Scene("popo"); scene[3] = new Scene("dodon"); y = new float[scene.length]; destY = new float[scene.length]; z = new float[scene.length]; destZ = new float[scene.length]; for(int i=0 ; i < scene.length ; i++) { y[i] = destY[i] = 125 * i; z[i] = destZ[i] = 0; } } void draw() { background(0); // タイトルを画面に描く fill(#ffffff); textSize(24); text("Popo Rhythm Parade!", 10, 34); textSize(12); text("Gihyo Processing Book Sample", 10, 50); // キー操作を画面に描く fill(#ffffff); textSize(12); text("Instruction:\n 'd' key : Toggle Presentation Mode(in 3D)\n 1 - 4 key : Change character speed ", 340, 10, 300, 100); for(int i=scene.length-1 ; i >= 0 ; i--) { y[i] -= (y[i] - destY[i]) / 10; z[i] -= (z[i] - destZ[i]) / 10; pushMatrix(); translate(0, y[i], z[i]); scene[i].update(); popMatrix(); } } void mousePressed() { for(int i=0 ; i < scene.length ; i++) { scene[i].mousePressed(); } } void keyPressed() { if(key == 'p') save("try2.png"); if(key == 'd' || key == 'D') { is3DMode = !is3DMode; if(is3DMode) { for(int i=0 ; i < destZ.length ; i++) { destY[i] = 300; destZ[i] = -i*300; } } else { for(int i=0 ; i < destZ.length ; i++) { destY[i] = 125 * i; destZ[i] = 0; } } } else if(key == '1') { scene[0].changeSpeed(); } else if(key == '2') { scene[1].changeSpeed(); } else if(key == '3') { scene[2].changeSpeed(); } else if(key == '4') { scene[3].changeSpeed(); } } // プログラム終了時にMinimライブラリの動作を停止する関数です。 // この関数がないとプログラム終了時に不具合が起きることがあります。 void stop() { for(int i=0 ; i < scene.length ; i++) { for(int j=0 ; j < scene[i].floor.samples.length ; j++) { scene[i].floor.samples[j].close(); } } minim.stop(); super.stop(); }