アクションゲームをつくろう!
こんにちは。ハリボーです。
本ブログもいつの間にか100記事を超えました。
今まで一番読まれた記事はProcessingでゲーム作成に挑戦した回でした。
参考にしてくださる読者様がいてくれて嬉しいですね。
というわけで今回は第2弾を書いていきます。
【その1】ではスーパーマリオ風スクロールゲームをつくろうとして横移動のみ実現しました。
次は立体感のある動きのためにキャラクターをジャンプさせてみます。
ゲーム上における重力加速度の表現
重要なのは重力による落下をどう記述するかです。
物体が落下するとき落下スピードは物体の質量には依存しません。
落下した距離を\( y \)、落下した時間を\( t \)、速度を\( v \)とおいたとき、\( y \)および\( v \)はそれぞれ
\( v=gt \)
\( y=\frac{1}{2}gt \)
と表されます。
ここで\( g \)は重力加速度で地球上ではおよそ\( 9.80665[\rm{m/s^2} \)です。
細かすぎるのでゲーム上では\( g=1 \)とします。
int gravity = 1; //gravity
『ジャンプ』を実装してみた
重力加速度を考慮してジャンプを記述すると次のように跳躍できます。
このとき、地面にめり込まないように注意。
地面との接触判定の記述がないと奈落の底までキャラクターが落ちます。
一回のジャンプで与える速度を調整してやればもっと高く飛べます。
動画がこちら。
ぴょんぴょん跳ぶことができました。
Processingのソースコード
コードはこちら。
横スクロールがないので前回よりもシンプルに記述できます。
PImage hari1;
PImage stage;
int x = 300; //x position
int y = 0; //y position
int vy = 0; //y velocity
int stage_y = 231; //y default
int jump = 1; // jump power ratio
int gravity = 1; //gravity
void setup() {
size(800, 370);
background(255, 255, 255, 255);
stage = loadImage("longstage1.png");
hari1 = loadImage("hari01.png");
}
void draw() {
//draw stage
image(stage, 0, 0);
image(hari1, x, y+stage_y);
vy += gravity;
y += vy;
if ( 0 < y)
{
y = 0;
}
}
void keyPressed() {
println(x,y);
if (key == CODED) {
if (keyCode == UP) {
if (y == 0){
vy = -10*jump;
}
}
}
}
今回はここまで。
次回はさらに跳び回ってみたいと思います。
第3弾はこちら。
(Visited 2,577 times, 1 visits today)