こんばんは!
今回はProcessingでパックマンを製作するの第三回になります。
前回からの修正で画面外からの復帰の処理を追加しました。
前回の記事はこちらにあります。
今回のコード
今回のコードはこちらになります。
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 | int radius = 40; float mouth = 0; float x = radius; float speed = 2.75; float openClose = 0.05; float y = 250; void setup() { size(1020, 500); smooth(); ellipseMode(RADIUS); } void draw() { background(255); if (keyPressed==true) { 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(); } } } } //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; } } |
今回のコードではパックマンが画面の外に出てしまったときに再び逆側から画面内に戻ってくるような処理を書いています。
例として、UPボタンを押し続けるとyの値が0未満になり、yの値が0未満になったとき、yの値が画面の高さ(ここでは500)+パックマンの半径になり、画面したから画面内に戻ってきます。
これを書き込んで実行すると以下の動画のようになります。
前回からのコードの修正によってパックマンが画面の外に出てしまう、という問題点を解決することができました。
次回以降はBGMや効果音をつけたり、壁を作ったりしていこうと思います。
今回はこれで終わります。
ではまた!