ファイルパッケージ
ファイルパッケージングとは、Altseed2で使用するファイルを一つのファイルにまとめる機能を指します。 この機能を使用することで、Altseed2で使用するリソースデータを、ユーザから簡単に見られないようにすることができます。
パッケージの作り方
ツールを利用して生成する(推奨)
Altseed2.Tools (.NETツール)を利用して、CLIコマンドまたはGUIを用いてパッケージを作成することができます。
ソースコード上から生成する
Altseed2を用いてソースコード上から生成する方法を説明します。
パッケージの作成は、Engine.File.Packメソッドで、パッケージ化するディレクトリとパッケージのパスを指定することでできます。 また、Engine.File.PackWithPasswordメソッドによって、パスワード付きでパッケージ化することが可能です。 パスワード付きのパッケージにすることで、パッケージ化されたリソースデータをユーザから抽出されるのを防ぐことができます。
パッケージの使い方
Engine.File.AddRootPackageメソッドでパッケージをルートに指定することが可能で、パッケージ内からファイルを読み込みます。 そして、ルートディレクトリやパッケージは複数指定できます。 ファイルを読み込む時に複数のファイルが見つかった時、後から追加されたルートディレクトリやパッケージから読み込みます。 絶対パスを指定した場合、ルートの指定関係なく絶対パスで指定された先を読み込みます。 パスワード付きのパッケージをルートに指定する場合、Engine.File.AddRootPackageWithPasswordメソッドを使用してください。
Tip
複数のパッケージを読み込んだ時の優先順位を利用することでアップデートパッチを容易に実装できます。 例えば、製品の最初でパッケージXに格納されているファイルAがあるとします。ファイルAに不具合が存在することが発覚し、ファイルAを差し替えることになりました。 このとき、更新した新しいファイルAをパッケージYに格納します。そして、プログラム側ではパッケージX, パッケージYの順に追加するようにしておきます。 すると同じ名前のファイルAを読み込むときにパッケージXからでなく、後から追加したパッケージYから読み込むようになります。 このように更新したファイルのみを別のパッケージにまとめることで、 実際に読み込む際のファイルのパス指定を変更することなく容易にファイルの更新を行えます。
Note
Altseed2のパッケージング機能の内部実装は、Zip圧縮になっています。 したがって、任意のZipファイルをパッケージとして読み込むことができます。
サンプル
パッケージの作成・読み込み
using System;
using Altseed2;
namespace Sample
{
class Package
{
[STAThread]
static void Main(string[] args)
{
// Altseed を初期化します。
if (!Engine.Initialize("SpriteNode", 640, 480)) return;
// TestData ディレクトリからファイルパッケージを生成します。
Engine.File.Pack("TestData", "Package.pack");
// Package.pack をルートパッケージにします。
Engine.File.AddRootPackage("Package.pack");
// パッケージに含まれる画像データをロードします。
var texture = Texture2D.Load(@"TestData/IO/AltseedPink256.png");
// 画像を描画するノードを生成・登録します。
var node = new SpriteNode();
node.Texture = texture;
Engine.AddNode(node);
// メインループ。
// Altseed のウインドウが閉じられると終了します。
while (Engine.DoEvents())
{
// Altseed を更新します。
Engine.Update();
}
// Altseed の終了処理をします。
Engine.Terminate();
}
}
}
パスワード付きパッケージの作成・読み込み
using System;
using Altseed2;
namespace Sample
{
class PackageWithPassword
{
[STAThread]
static void Main(string[] args)
{
// Altseed を初期化します。
if (!Engine.Initialize("SpriteNode", 640, 480)) return;
// TestData ディレクトリからファイルパッケージを生成します。
// パスワードを ALTSEED とします。
Engine.File.PackWithPassword("TestData", "Package.pack", "ALTSEED");
// Package.pack をルートパッケージにします。
Engine.File.AddRootPackageWithPassword("Package.pack", "ALTSEED");
// パッケージに含まれる画像データをロードします。
var texture = Texture2D.Load(@"TestData/IO/AltseedPink256.png");
// 画像を描画するノードを生成・登録します。
var node = new SpriteNode();
node.Texture = texture;
Engine.AddNode(node);
// メインループ。
// Altseed のウインドウが閉じられると終了します。
while (Engine.DoEvents())
{
// Altseed を更新します。
Engine.Update();
}
// Altseed の終了処理をします。
Engine.Terminate();
}
}
}
Zipファイルをパッケージとして読み込み
using System;
using Altseed2;
namespace Sample
{
class PackageFromZip
{
[STAThread]
static void Main(string[] args)
{
// Altseed を初期化します。
if (!Engine.Initialize("SpriteNode", 640, 480)) return;
// Package.zip をルートパッケージにします。
Engine.File.AddRootPackage("Package.zip");
// パッケージに含まれる画像データをロードします。
var texture = Texture2D.Load(@"TestData/IO/AltseedPink256.png");
// 画像を描画するノードを生成・登録します。
var node = new SpriteNode();
node.Texture = texture;
Engine.AddNode(node);
// メインループ。
// Altseed のウインドウが閉じられると終了します。
while (Engine.DoEvents())
{
// Altseed を更新します。
Engine.Update();
}
// Altseed の終了処理をします。
Engine.Terminate();
}
}
}