Posted at

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

More than 1 year has passed since last update.


はじめに

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();
});


次回予定

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