はじめに
phina.jsでモンストもどきを作るという試みの第1回です。
まずはステージ背景とプレイヤーの配置までを実装しようと思います。
ステージ背景
モンストといえば、草原っぽい背景が印象にありますので、以下のような適当に作った画像を背景として用意しました。
サイズは、phina.jsのデフォルトの画面サイズである640x960にしています。
画像の読み込み
背景画像はアセットとして、以下のように指定します。
// アセット
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',
},
};
プレイヤーはもちろん、おなじみのキャラです。
プレイヤークラスの作成
プレイヤーの配置の前に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クラスを呼び出せば、クラス内部でスプライトの設定が行われます。
動作確認
まだこの段階では、背景の上にプレイヤーが表示されるだけです。
全体コード
// グローバルに展開
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();
});
次回予定
次回は、プレイヤーを引っ張った時に表示される矢印を実装したいと思います。