AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


前回の記事『ノベルゲームエンジン制作(1) 』で次回はスクリプトコンバーターについて書くと言っていました。


ところが、実装予定のコマンドが多くなりすぎて仕様変更の可能性を残したまま書くのもどうかと思うので、先にイメージコンバーターについて書きます。


と言っても1つの記事で終了するようなものでもないので、機能別に書いていくことにしようと思っています。


今回はまずイメージコンバーターの仕様について書きます。


以下がイメージコンバーターの仕様になります。


(1)FlashPlayerの仕様に基づいて、結合できる画像形式は「JPEG」、「GIF」、「PNG」の3種類とする。
(2)インターフェースはドラッグ&ドロップ方式とする。
(3)複数ファイルを一度に処理できるようにする。
(4)エラーチェックするため、全ての入力ファイルが(1)の形式に該当するか確認後、
作成ボタン押下により、内部で作成したバイナリデータを結合ファイルを出力する。
(5)閉じるボタンを作成する。
(6)ノベルゲームプレーヤー用のイメージ結合ファイル用の拡張子を決め、
ファイルの最初にタグを埋め込む。
(7)プレーヤー側からのデータ取得時に利用するリストIDの後に実際のデータを出力する。
(8)(6)、(7)の内容をまとめるとフォーマットは、
[タグ]-{[リストID][画像バイナリ]}(中括弧部は画像枚数分繰り返し)となる。
(9)暗号化する場合、プレーヤー側で復号できるようにする。
(10)結合ファイルにどのファイルが結合されているのか確認するため、
結合ファイルリスト(テキストファイル)を同時に出力する。
(11)リストIDはファイル名を引き継ぐ(hoge.gifならリストIDはhogeとなる)


では次回から、実装の解説に移りたいと思います。

AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


ノベルゲームプレイヤーにセーブ・ロード機能、タイトルに戻る、ゲーム終了などの機能を実装し終わったのですが、モーダルダイアログの機能がないのがこれほど不便だとは思いませんでした。


モーダルダイアログは、ウインドウに関連付けて表示するダイアログで、そのダイアログを終了するまではその他の操作を受け付けないというものです。


上記の実装時に処理確認用のモーダルダイアログを必要としたのですが、どうもAIRのNativeWindowにはモーダルダイアログを作成する機能がないみたいです。


現在はゲームモードフラグを利用して擬似的に、プレーヤー側の操作ができないようにしていますが、どうにかならないものでしょうか。


AIRのVersionUPが進めば実装されるんでしょうか?


困ったものです。。。

AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


表題通り、AIRウインドウのセンタリングについてのメモ。


まずOSのプライマリスクリーン(これはダブルバッファリングのプライマリスクリーンとは意味が違います)の情報を取得します。


OSのプライマリスクリーンはメインで表示しているモニターの画面を指します。


コントロールパネルの画面の設定でプライマリスクリーンを入れ替えたりできますが、この辺りの情報についてはご自分で調べて下さい。


プライマリスクリーンの情報を取得するコードは以下の通りです。


private function GetCurrentScreen() : Screen
{
    return Screen.getScreensForRectangle(stage.nativeWindow.bounds)[0];
}


Screen.getScreensForRectangle関数はstatic関数です。この関数の引数にRectangleを指定してやります。するとその矩形領域の一部でも存在するスクリーンの情報が配列となって返却されます。


つまり2つのスクリーンにまたがる矩形を指定すると配列にはその2つのスクリーンの情報が返却されることになります。


返却される配列の最初の要素はプライマリスクリーンの情報です。その情報を元にAIRのメインウインドウのセンタリングを行います。


実際のコードは以下のようになります。


function WindowCentering() : void
{
    // OSのプライマリスクリーン情報を取得(先程の関数を利用)
    var screen:Screen = GetCurrentScreen();
    
    // メインウインドウのセンタリング
    stage.nativeWindow.x = (screen.bounds.width / 2) - (stage.nativeWindow.width / 2);
    stage.nativeWindow.y = (screen.bounds.height / 2) - (stage.nativeWindow.height / 2);
}


以上です。