こんばんは!
今回はProcessingでパックマンを製作するの第三回になります。
前回からの修正でBGMの追加しました。
前回の記事はこちらにあります。
コード
今回のコードはこちらになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; import ddf.minim.signals.*; import ddf.minim.spi.*; import ddf.minim.ugens.*; int radius = 40; float mouth = 0; float x = radius; float speed = 2.75; float openClose = 0.05; float y = 250; Minim minim = new Minim(this); AudioPlayer start; AudioPlayer move; void setup() { size(1020, 500); smooth(); ellipseMode(RADIUS); start = minim.loadFile("start.mp3"); move = minim.loadFile("move.mp3"); startMusic(); } void draw() { background(0); if (keyPressed==true) { move.play(); if (key == CODED) { if (keyCode == RIGHT) { x+= speed; makePackmanRight(); } } if (key == CODED) { if (keyCode == LEFT) { x -= speed; makePackmanLeft(); } } if (key == CODED) { if (keyCode == UP) { y -= speed; makePackmanUp(); } } if (key == CODED) { if (keyCode == DOWN) { y += speed; makePackmanDown(); } } } else { move.pause(); move.play(0); } } //left void makePackmanLeft() { fill(255, 0, 0); mouth += openClose; if (mouth > PI/6 || mouth < 0) { openClose = openClose * -1; } arc(x, y, radius, radius, -5*(PI/6)-mouth, +mouth+PI*5/6); if (x<-radius) { x=width+radius; } } //right void makePackmanRight() { fill(255, 0, 0); mouth += openClose; if (mouth > PI/6 || mouth < 0) { openClose = openClose * -1; } arc(x, y, radius, radius, mouth, TWO_PI - mouth); if (x>width+radius) { x=-radius; } } //under void makePackmanDown() { fill(255, 0, 0); mouth += openClose; if (mouth > PI/6 || mouth < 0) { openClose = openClose * -1; } arc(x, y, radius, radius, PI/2 + mouth, TWO_PI + PI/2 - mouth); if (y>height+radius) { y=-radius; } } //up void makePackmanUp() { fill(255, 0, 0); mouth += openClose; if (mouth > PI/6 || mouth < 0) { openClose = openClose * -1; } arc(x, y, radius, radius, -PI/2 + mouth, TWO_PI + -PI/2 - mouth); if (y<-radius) { y=height+radius; } } //music start void startMusic() { start.play(); } |
このコードは前のMinimライブラリの記事でやったやり方に沿っています。
起動したときのスタート音と、パックマンが移動しているときの音を前回のコードに追加しています。
keyPressedがtrueの時は移動音を鳴らし、falseの時は移動音を鳴らさないようにしています。
else文の中にある
move.play(0);
というのは、move.mp3ファイルの再生位置を0秒の位置に戻しています。
というのも、move.play();で再生し音源の最後の位置までいってしまうと、その後move.play();が呼び出されても音が再生されないので、キーから離れると音を止めると同時に再生位置を0秒の位置まで戻すという処理を書いています。
これを実行すると以下のように起動したときと、パックマンが移動したときに音が鳴ると思います。
前回のコードからBGMを追加することでゲームらしくなった気がします。
次回は壁を作っていこうと思います。
ではまた!