ランキング形式のシングルゲームを作るとき
akashic init -t javascript-shin-ichiba-ranking
このコマンドを使うんだけど、自分の場合テンプレートから使わない部分を消してから作り始めます。
テンプレートから変更になる点
・キャラクターは画面中央に配置(動かない)
・弾はでない
・クリックしても音はならない(スコアは1ずつ増える)
exports.main = void 0;
function main(param) {
var scene = new g.Scene({
game: g.game,
// このシーンで利用するアセットのIDを列挙し、シーンに通知します
assetIds: ["player", "se"]
});
var time = 60; // 制限時間
if (param.sessionParameter.totalTimeLimit) {
time = param.sessionParameter.totalTimeLimit; // セッションパラメータで制限時間が指定されたらその値を使用します
}
// 市場コンテンツのランキングモードでは、g.game.vars.gameState.score の値をスコアとして扱います
g.game.vars.gameState = { score: 0 };
scene.onLoad.add(function () {
// ここからゲーム内容を記述します
// 各アセットオブジェクトを取得します
var playerImageAsset = scene.asset.getImageById("player");
//コピペ用(音声)
var seAudioAsset = scene.asset.getAudioById("se");
// ↓コピペする用(letで変数作りたいので追加した。あってもなくてもいい)
// let testAsset = scene.asset.getImageById("");
//背景設定(テストで見やすくするため)
let background = new g.FilledRect({
scene: scene,
cssColor: "gray",
width: 1280,
height: 720,
opacity: 0.2
});
scene.append(background);
// プレイヤーを生成します
var player = new g.Sprite({
scene: scene,
src: playerImageAsset,
width: playerImageAsset.width,
height: playerImageAsset.height,
x: g.game.width/2,
y: g.game.height/2,
});
scene.append(player);
// フォントの生成
var font = new g.DynamicFont({
game: g.game,
fontFamily: "sans-serif",
size: 48
});
// スコア表示用のラベル
var scoreLabel = new g.Label({
scene: scene,
text: "SCORE: 0",
font: font,
fontSize: font.size / 2,
textColor: "black"
});
scene.append(scoreLabel);
// 残り時間表示用ラベル
var timeLabel = new g.Label({
scene: scene,
text: "TIME: 0",
font: font,
fontSize: font.size / 2,
textColor: "black",
x: 0.65 * g.game.width
});
scene.append(timeLabel);
scene.onPointDownCapture.add(function () {
// 制限時間以内であればタッチ1回ごとにSCOREに+1します
if (time > 0) {
g.game.vars.gameState.score++;
scoreLabel.text = "SCORE: " + g.game.vars.gameState.score;
scoreLabel.invalidate();
}
});
var updateHandler = function () {
if (time <= 0) {
// ゲームアツマール環境であればランキングを表示します
if (param.isAtsumaru) {
var boardId_1 = 1;
window.RPGAtsumaru.experimental.scoreboards.setRecord(boardId_1, g.game.vars.gameState.score).then(function () {
window.RPGAtsumaru.experimental.scoreboards.display(boardId_1);
});
}
scene.onUpdate.remove(updateHandler); // カウントダウンを止めるためにこのイベントハンドラを削除します
}
// カウントダウン処理
time -= 1 / g.game.fps;
timeLabel.text = "TIME: " + Math.ceil(time);
timeLabel.invalidate();
};
scene.onUpdate.add(updateHandler);
// ここまでゲーム内容を記述します
});
g.game.pushScene(scene);
}
exports.main = main;