Processingで横スクロールアクションゲームをつくる【その2】

Processingで横スクロールアクションゲームをつくる【その2】

ゲームをつくろう!

こんにちは。ハリボーです。

本ブログもいつの間にか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弾はこちら

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です