更新情報 (〜2024/05/20)
エンジン
音声アセットとして M4A (.m4a) をサポートするように
Akashic Engine v3.12.0 (pdi-browser@2.4.6) 以降、従来の AAC ファイル (.aac) に代えて M4A ファイル (.m4a) を利用できるようになりました。
つまり音声アセットは次のいずれかの組み合わせを利用できます。
- Ogg Vorbis ファイル (.ogg) と AAC ファイル (.aac)
- Ogg Vorbis ファイル (.ogg) と M4A ファイル (.m4a)
併せて、周辺ツールが M4A ファイルを処理するようになっています。
akashic scan
,akashic export
コマンドが .m4a ファイルを扱うようにcomplete-audio
が .m4a ファイルを生成するように
INFO
M4A ファイルを利用するには、game.json のアセット定義で hint.extensions
フィールドを指定する必要があります。 ただしこれは akahsic scan asset
コマンドによって自動的に行われるため、通常ゲーム開発者が編集する必要はありません (akashic-cli@2.16.30 以降) 。 hint.extensions
の詳細は 設定ファイル » game.json の仕様 » type: "audio" を参照してください。
音声ファイルの一部だけを効果音として使用できるように
Akashic Engine v3.12.0 (pdi-browser@2.4.6) 以降で、音声ファイルの一部だけを効果音の音声アセットとして使用できるようになりました。
game.json のアセット定義で、音声アセットに "offset"
プロパティを与えると、指定されたオフセットから "duration"
分だけを再生する音声アセットになります。
以下は、全体で 10 秒 (10000 ミリ秒) として登録されている音声アセットを、「3000 ミリ秒時点から 200 ミリ秒分再生するアセット」にする例です。
{
...
"assets": {
"se1": {
"type": "audio",
"path": "audio/se/se1",
"systemId": "sound",
"duration": 10000,
"duration": 200,
"offset": 3000,
}
...
}
}
これにより、ごく細かい効果音のファイルを一つにまとめることができます。
実装の都合上、現在は効果音 ("systemId": "sound"
, ループ再生しない音声アセット) でのみ利用できます。 また時間指定の精度の問題のため、この機能は M4A ファイルを使う音声アセット (.m4a と .ogg の音声アセット) でのみ利用することを推奨します。 (.aac と .ogg では再生箇所のずれが大きくなる可能性があります)
WARNING
akashic scan asset
コマンドは通常、音声アセットのファイル内容が変化した場合 "duration"
を自動で更新します。 しかし "offset"
が指定されている場合は "duration"
の更新を行わない ので注意してください。
音声をフェードインやクロスフェードできるように
Akashic Engine v3.9.0 で、新しい音声再生方法 g.AudioPlayContext
と、フェードインなどを行うユーティリティ g.AudioUtil
を追加しました。
次のようなコードでフェードイン再生やクロスフェードを行うことができます。
const bgm1 = scene.asset.getAudio("/assets/bgm1"); // オーディオアセットを取得
const bgm2 = scene.asset.getAudio("/assets/bgm2");
// 3000ms で音量 0.5 までフェードインして再生
const ctx1 = g.game.audio.create(bgm1); // bgm1 の AudioPlayContext を作成
g.AudioUtil.fadeIn(g.game, ctx1, 3000, 0.5);
...
// 5 秒間で再生中の ctx1 (bgm1) をフェードアウトしながら ctx2 (bgm2) をフェードイン
const ctx2 = g.game.audio.create(bgm2);
g.AudioUtil.crossFade(g.game, ctx2, ctx1, 5000);
特に従来の API では、BGM を再生すると直前まで再生されていた BGM は自動的に停止されていました。 そのためクロスフェード (フェードアウトしながら別の BGM をフェードイン) することはできませんでした。
併せて逆引きリファレンスに項目を追加しました。 g.AudioPlayContext
の利用方法や、背景を含めた詳細は以下を参照してください。
マウスの右クリックなどを識別できるように
Akashic Engine v3.16.0 で、 g.PointEvent#button
を追加しました。 これは次のいずれかの数値で、ボタンなどの状態変化を表します。
button | 意味 |
---|---|
-1 | 最後のイベント以降、ボタンもタッチ接触も変化していない ( onPointerMove , onPointerMoveCapture のみ) |
0 | マウスの左ボタン、タッチ接触の状態が変化した |
1 | マウスの中ボタンの状態が変化した |
2 | マウスの右ボタンの状態が変化した |
例えばマウスの右ボタンが押下された時は、 onPointDown
トリガーに通知される g.PointDownEvent
の button
が 2
になります。
シーン内の任意の場所を押下した時に、マウスボタンに応じて処理を分けるには、次のようなコードを書くことができます。
scene.onPointDownCapture.add((ev) => {
switch (ev.button) {
case 0: // マウス左ボタンまたはタッチの押下
break;
case 2: // マウス右ボタンの押下
break;
default: // それ以外
break;
}
});
併せて逆引きリファレンスに項目を追加しました。サンプルコンテンツや仕様の詳細は以下を参照してください。
最大同時タップ数を制限できるように
Akashic Engine v3.9.3 以降において、最大同時タップ数を指定できるようになりました。 game.json に "maxPoints"
を指定することで、ゲームコンテンツに通知される最大同時タップ数が制限されるようになります。
{
"fps": 30,
"width": 1280,
"height": 720,
...
"maxPoints": 1
}
例えば 1
を指定した場合、何らかの onPointDown
の通知から onPoinbtUp
の通知までの間に、他の onPointDown
通知は発生しなくなります。 マルチタップを使わないゲームでは、ゲーム内でマルチタップされた時の処理を記述する必要がなくなります。
compositeOperation
の値を追加
Akashic Engine v3.16.6 で、 g.E#compositeOperation
に指定可能な値を追加しました。 以下を指定できます。
"difference"
: 先に描画された領域との差 (の絶対値) を描画する。"saturation"
: 先に描画された領域の彩度を上書きする (色相と輝度は維持する) 。
ただし利用するレンダラーに制限があります。詳細は以下を参照してください。
下のシーンに重ねて描画されるシーンを作成できるように
Akashic Engine v3.14.2 で、 g.Scene
生成時に seethrough
オプションを指定できるようになりました。
const scene = g.Scene({
game: g.game,
...
seethrough: true
});
seethrough: true
のシーンが g.game.pushScene()
されると、遷移前のシーンが画面奥側に描かれた状態で描画されます。 (ただし遷移前のシーンの動作は止まります)
「アセットロードが必要なメニュー画面」のようなユースケースを想定した機能です。 詳細は以下を参照してください。
g.game.onUpdate
, g.game.asset
を追加
Akashic Engine v3.9.2 で g.game.onUdpate
を追加しました。 従来の g.Scene#onUpdate
と同じもの (毎フレーム通知されるトリガー) ですが、シーンの遷移に関係なく通知を受けることができます。
Akashic Engine v3.17.1 で g.game.asset
を追加しました。 こちらは従来の g.Scene#asset
と同じ g.AssetAccessor
ですが、シーンを参照せずにアセットにアクセスできるよう追加されました。 利用法は 逆引きリファレンス » 読み込んだアセットを取得する を参照してください。
WARNING
実装の都合上、g.game.onUpdate
は g.game.age
の更新後に通知されます。 従来の g.Scene#onUpdate
は、同じフレームでも age
更新前に通知されるので、 age
を参照する処理では違いに注意してください。
その他の変更・機能追加
- ゲーム開発者がシーンごとに任意のデータを保持できる領域
g.Scene#vars: any
を追加。 - ナインパッチ描画を行う
g.SurfaceUtil.drawNinePatch()
を追加。(参考) - アセットの ID からパスを逆引きする関数
g.AssetAccessor#pathOf()
を追加 (参考) - 数値を最大値・最小値の範囲に丸める関数
g.Util.clamp()
を追加。(参考) g.Surface
生成時、非整数のサイズ指定をエラーにせず切り上げるように。- TypeScript テンプレートの main.ts で
export default
を利用できるように。 - スクリプトアセットの定義に
preload?: boolean
を追加。(参考) g.Scene#requestAssets()
で、コールバックでエラーを受け取れるように (参考)g.Storage
関連の不使用コードを削除。
不具合修正
require()
/import
で、拡張子の有無で別スクリプト扱いになる問題を修正。g.game.removeEventFilter()
にundefined
を渡すと全フィルタ削除される問題を修正。g.game.random
が 1 を生成する可能性があった問題を修正。- ローディングシーン中にゲームが破棄されるとエラーになる問題を修正。
- スナップショットからの復元時、エントリポイントの引数が渡されない問題を修正。
- スナップショットからの復元時、
g.game._idx
が復元できない問題を修正。 - リプレイ再生でのシーク時、アセットロード中の時間経過の扱いが誤っていた問題を修正。
- Chrome で、ゲーム画面のわずかに (1px 未満) 外側をクリックできる問題を修正。
- HTML 出力時、同じ音声が連続で再生されるとエラーになることがある問題を修正。
- ペンタブレットによるドラッグ時、意図しない操作が起きる問題を修正。
ツール
M4A (.m4a) に対応
akashic-cli@2.16.33 以降で、M4A ファイル (.m4a) をサポートするようになりました。
- akashic scan コマンドが .m4a ファイルを音声アセットとして扱うように。
- akashic export コマンドが .m4a ファイルを出力に含めるように。
- akashic stat コマンドが .m4a のファイルサイズを考慮するように。
また complete-audio@1.0.0 以降で、デフォルトの出力形式を .ogg と .m4a に変更しました。
sandbox.config.js の設定項目を追加
akashic-sandbox や akashic serve コマンドの設定ファイル sandbox.config.js で以下を指定できるようになりました。
- 開発者メニューの表示・非表示 (serve, sandbox)
- 表示オプション (serve のみ)
- 子ウィンドウのサイズ (serve のみ)
- 各種警告機能の有効・無効 (serve, sandbox)
sandbox.config.js は、game.json のあるディレクトリに置く設定ファイルで、次のような指定を行うことができます。
const config = {
// 開発者メニューを開いた状態で起動する (serve, sandbox で有効)
showMenu: true,
// 表示設定 (serve のみ)
displayOptions: {
fitsToScreen: true, // ゲーム画面をウィンドウサイズに合わせる
backgroundColor: "red", // 背景色
showsGrid: true // ゲーム画面にグリッドを表示する
},
// 新規ウィンドウ作成時のサイズ (serve のみ)
windowSize: {
width: 640,
height: 480
},
// 警告設定 (sandbox, serve で有効)
warn: {
useDate: false, // Date.now() 使用時に警告しないようにする
useMathRandom: false // Math.random() 使用時に警告しないようにする
}
};
module.exports = config;
showMenu
はこれまで akashic-sandbox でのみ有効でしたが、akashic serve でも利用できるようになりました。
warn
は、 akashic-sandbox や akashic serve の 警告表示を抑止する ことができます。 意図的に Akashic ゲームの原則を無視する場合に、大量の警告が表示されてしまう問題を回避することができます。
その他指定可能なすべての値については、以下を参照してください。
- 設定ファイル » sandbox.config.js の仕様 » displayOptions
- 設定ファイル » sandbox.config.js の仕様 » windowSize
- 設定ファイル » sandbox.config.js の仕様 » warn
大きなイベントの送信時に警告するように
akashic-cli@2.16.26 以降の akashic serve コマンドで、 g.MessageEvent
のエンコード後サイズが 100KiB を超える時、コンソールに警告を表示するようになりました。
特にニコ生ゲーム環境においては、大きすぎるイベントを送信するとその後の通信が不安定になる場合があります。 厳密な基準はありませんが、経験的にわかっている基準値で警告を表示します。
serve でスクリーンショットを保存できるように
akashic-cli@2.16.53 で、akashic serve にゲーム画面のスクリーンショット保存機能を追加しました。 画面右上の Display Options にボタンを追加しています。
EditorConfig に対応
akashic-cli@2.16.0 で、 EditorConfig の設定に従うようになりました。
game.json のあるディレクトリに .editorconfig という名前のファイルがある場合、 akashic scan/install/uninstall はその設定に従って game.json をフォーマットします。これによりインデントサイズや改行コードなどを制御することできます。
併せて akashic init の標準テンプレートに .editorconfig を追加しました。
TypeScript テンプレートのコンパイルオプションを更新
noImplicitOverride: true
を追加 (仕様)。
これによりクラスの継承時、基底クラスのプロパティは override
をつけないとオーバーライドできなくなりました。 特に g.E
を継承して独自のエンティティを作成する場合に、id
プロパティなどを意図せず上書きしてエンジンの動作がおかしくなる問題を軽減します。
forceConsistentCasingInFileNames: true
を追加 (仕様) 。
import
において、ファイル名の大文字小文字が正しいことを強制します。 ファイル名の大文字小文字が区別されない Windows 環境で作成されたゲームが、環境によって正しく動作しない問題を回避します。
その他の更新 (akashic serve)
--no-open-browser
オプションのエイリアスとして-B
を追加。- ES2015 以降の構文や機能を利用した場合の警告を廃止。
- game.json の
environment.nicolive.preferredSessionParameter
の設定に従うように。 - developer ツールのイベント送信機能で、ローカルイベントを送信できるように。
- 子ウィンドウのデフォルトサイズを、ゲーム画面のサイズに応じて決定するように。
- sandbox.config.js に
server.external
プロパティを追加。(仕様) - 不具合修正:
--watch
(-w
) オプション (コンテンツ変更時にリロード) で、スクリプトアセットの変更が無視される問題を修正。 - 不具合修正:
--watch
(-w
) オプションで、リロードが二重に発生する問題を修正。 - 不具合修正: タイミング依存で Join イベントが送信されない場合がある問題を修正。
- 不具合修正: Akashic Engine v1 系コンテンツを起動できない問題を修正。
- 不具合修正: canvas の範囲外描画警告が誤って表示されることがある問題を修正。
その他の更新 (akashic export)
- 出力する .js ファイルの文字コードを UTF-8 に変換するように。
- 音声アセットのファイル形式が足りない時 (.ogg のみのアセットなど) に警告するように。
- ゲームに
@akashic/akashic-enigne
本体が同梱されている時、エラーにするように。 - export zip に
--nicolive
オプションを追加。 --nicolive
の時、game.json や全体のファイルサイズをチェックして警告するように。--nicolive
の時、game.json のsupportedModes
指定漏れなどをチェックするように。environment.niconico
に代わるenvironment.nicolive
をサポートするように。environment.niconico
を暗黙にenvironment.nicolive
に変換して出力するように。--atsumaru
オプションを廃止。- 内部オプション
--resolve-akashic-runtime
,--preserve-package-json
を追加。 - 高速化: コンテンツ生成中の不要なファイルコピーを削減。
- 不具合修正:
hint.extensions
指定があるコンテンツで--hash-filename
がエラーになる問題を修正。
その他の更新 (akashic scan)
- 画像ファイルのサイズ取得に失敗した時のエラーメッセージを改善。どのファイルの問題か分かるように。
- 不具合修正: package.json の
main
フィールドの拡張子が省略されたライブラリを利用するとエラーになる問題を修正。 - 不具合修正: ゲームディレクトリ外のディレクトリを参照するシンボリックリンクがあるとエラーになる問題を修正。
- 不具合修正:
globalScripts
がホームディレクトリからの相対パスになることがある問題を修正。
その他の更新 (akashic install)
@akashic/akashic-engine
を akashic install した時、エラーにするように。- 不具合修正: Node.js でも動作するライブラリの install 時にエラーになる問題を修正。
その他の更新 (akashic-sandbox)
- ES2015 以降の構文や機能を利用した場合の警告を廃止。
- akashic-cli に統合、
akashic sandbox
コマンドに。(Webサイトの移行が進行中です。完了後に改めてお知らせします)
その他の更新 (complete-audio)
- デフォルトの出力先を「入力ファイルと同じディレクトリ」に変更。
- 従来はコマンドを実行したディレクトリでした。
- 出力先を指定するオプション
-o
を追加。 --experimental-output-m4a
オプションを廃止 (デフォルト動作に) 。- M4A の代わりに AAC を出力する
--output-aac
オプションを追加。 - 不具合修正: カバー画像つきの MP3 ファイルでエラーになる問題を修正。
ニコ生ゲーム
RPG ツクール MV ニコ生ゲーム化キット・コンバータを公開
RPG ツクール MV のゲームをランキング対応ニコ生ゲームに変換するためのキット、および変換処理を自動化したアプリケーション (コンバータ) を公開しました。
詳細は ニコ生ゲームを作ろう » RPG ツクール MV で作ろう を参照してください。
公開後の更新 (コンバータ)
- サポート対象外の RPG ツクール MV プラグインも変換できるように
- アップデート時に 更新内容 が確認できるように
- バージョン情報追加
- 不具合修正: 変換エラー時に「RPG ツクール MV プラグインを含めて変換する」チェックボックスが disabled のままになる不具合の修正
公開後の更新 (ランタイム)
- 「画面の色調変更」機能をサポートできるように
- ピクチャのボタン化プラグインがマウスホバーに対応できるように
- フェードイン時に音量の設定も行うように
- 動的文字列ピクチャ生成プラグイン の Version 1.20.5 を利用できるように
- ピクチャのボタン化プラグイン の Version 1.14.5 を利用できるように
TouchInput
やGraphics
等のクラスを外部のスクリプトから参照できるように- ニコ生ランキングゲームプラグインにタイマー制御するプラグインコマンドを追加
- ニコ生ランキングゲームプラグインにパラメータ
forceNamagameTimer
を追加 - ニコ生ランキングゲームプラグインで全体音量を設定できるように
- 不具合修正: フォントのstrokeColorの初期値を修正
- 不具合修正: タイトル画面への遷移時、グローバル変数を初期化し直すように
- 不具合修正: グローバル変数の循環参照を解消
- 不具合修正: MAP上で敵にエンカウントできない問題を修正
- 不具合修正: 戦闘時に敵にステータスアイコンが表示されない問題を修正
- 不具合修正: 画像の読み込み処理が一度に大量に発生するとゲームが処理落ちしてしまう問題を修正
- 不具合修正: 敵キャラの色相指定が反映されない問題を修正
- 不具合修正: 敵選択時に敵が明滅しない問題を修正
- 不具合修正: 文章のスクロールができない問題を修正
- 不具合修正: 戦闘画面での攻撃時に味方キャラに武器が無い場合エラーになってしまう問題を修正
- 不具合修正: タイトル画面や選択肢でゲームが止まってしまうことがある問題を修正
- 不具合修正: 装備品を変更すると元の装備品が消えてしまう問題を修正
- 不具合修正: 重なったメニューの背景が透けてしまう問題を修正
- 不具合修正: バトル画面が正常に動作しない問題を修正
- 不具合修正: text の maxWidth に応じてフォントサイズを変更するように
- 不具合修正: 空白文字を設定しても消されて強制左詰めにされていたのを修正
- 不具合修正: ニコ生ランキングゲームプラグインでスコアを表示するように