LoginSignup
5
4

More than 5 years have passed since last update.

phina.jsでモンストっぽいゲームを作る【1】ーステージ背景とプレイヤーの配置ー

Posted at

はじめに

phina.jsでモンストもどきを作るという試みの第1回です。
まずはステージ背景とプレイヤーの配置までを実装しようと思います。

ステージ背景

モンストといえば、草原っぽい背景が印象にありますので、以下のような適当に作った画像を背景として用意しました。
サイズは、phina.jsのデフォルトの画面サイズである640x960にしています。

bg.png

画像の読み込み

背景画像はアセットとして、以下のように指定します。

// アセット
var ASSETS = {
  // 画像
  image: {
    'bg': 'https://rawgit.com/alkn203/piko_strike/master/assets/bg.png',
  },
};

そして、main関数で以下のように読み込みます。

/*
 * メイン処理
 */
phina.main(function() {
  // アプリケーションを生成
  var app = GameApp({
    title: 'Piko Strike',
    // アセット読み込み
    assets: ASSETS,
  });

背景表示

背景画像はスプライトとしてシーンに追加します。

    // 背景
    Sprite('bg').addChildTo(this)
                .setPosition(this.gridX.center(), this.gridY.center());
  },
});
  • Spriteクラスのコンストラクタには、アセット定義で指定した文字列を引数として与えています。
  • 画像は画面と同じサイズにしたので、位置はグリッドを使って画面中央に指定しています。
  • グリッドについては、少し古い記事ですが【phina.js】Gridクラスを使いこなそうを参考にして下さい。

プレイヤーの配置

画像の読み込み

プレイヤー画像はアセットとして、以下のように追加します。

// アセット
var ASSETS = {
  // 画像
  image: {
    'bg': 'https://rawgit.com/alkn203/piko_strike/master/assets/bg.png',
    'tomapiko': 'https://rawgit.com/phinajs/phina.js/develop/assets/images/tomapiko.png',
  },
};

プレイヤーはもちろん、おなじみのキャラです。

tomapiko.png

プレイヤークラスの作成

プレイヤーの配置の前にSpriteクラスを継承したPlayerクラスを定義します。

/*
 * プレイヤークラス
 */
phina.define("Player", {
  // 継承
  superClass: 'Sprite',
  // コンストラクタ
  init: function() {
    // 親クラス初期化
    this.superInit('tomapiko');
  },
});

superInitで、親クラスSpriteのコンストラクタにアセット文字列を与えています。

シーンに追加

シーンへの追加は、背景画像を追加した時と基本的に同じです。

    // プレイヤー
    this.player = Player().addChildTo(this);
    this.player.setPosition(this.gridX.center(), this.gridY.span(15));

Playerクラスを呼び出せば、クラス内部でスプライトの設定が行われます。

動作確認

monst-tut-02.gif

[runstantプロジェクトへのリンク]

まだこの段階では、背景の上にプレイヤーが表示されるだけです。

全体コード

// グローバルに展開
phina.globalize();
// アセット
var ASSETS = {
  // 画像
  image: {
    'bg': 'https://rawgit.com/alkn203/piko_strike/master/assets/bg.png',
    'tomapiko': 'https://rawgit.com/phinajs/phina.js/develop/assets/images/tomapiko.png',
  },
};
// 定数
var SCREEN_WIDTH = 640;
var SCREEN_HEIGHT = 960;
/*
 * メインシーン
 */
phina.define("MainScene", {
  // 継承
  superClass: 'DisplayScene',
  // コンストラクタ
  init: function() {
    // 親クラス初期化
    this.superInit();
    // 背景
    Sprite('bg').addChildTo(this)
                .setPosition(this.gridX.center(), this.gridY.center());
    // プレイヤー
    this.player = Player().addChildTo(this);
    this.player.setPosition(this.gridX.center(), this.gridY.span(15));
  },
});
/*
 * プレイヤークラス
 */
phina.define("Player", {
  // 継承
  superClass: 'Sprite',
  // コンストラクタ
  init: function() {
    // 親クラス初期化
    this.superInit('tomapiko');
  },
});
/*
 * メイン処理
 */
phina.main(function() {
  // アプリケーションを生成
  var app = GameApp({
    title: 'Piko Strike',
    // アセット読み込み
    assets: ASSETS,
  });
  // 実行
  app.run();
});

次回予定

次回は、プレイヤーを引っ張った時に表示される矢印を実装したいと思います。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4