前回の記事では、グラフィックページについて解説した。グラフィックページはSPRITE/BGのキャラクタデータ置き場やグラフィック画面として利用することができる、全6ページのメモリバッファだ。プチコンmkIIがSPU(SPRITE用)、BGU(BG用)のように用途別にリソースを分けていたのに対し、プチコン3号ではグラフィックページに1本化されている。
そのため、これらのリソースに対する入出力も極めてシンプルになっている。まず、グラフィックページをファイルに保存するSAVE、ファイルからグラフィックページに読み込むLOAD。ファイルではなく配列に保存する場合にはGSAVE、その逆はGLOADを使用する。GLOADはグラフィックページではなくグラフィック画面への書き出しになるので、GPAGEで読み込み先のグラフィックページを描画画面として設定する必要がある。グラフィックページ同士のコピーならGCOPYを使えばよい。なお、
「1画面分(400×240ピクセル)のデータ配列を用意し、GLOAD命令で毎フレーム、グラフィックページに転送することを繰り返した場合、60fpsを維持できるのか知りたいです」
というツイートがあったので、2パターンのデータ配列を用意して交互に切り替えてみたところ、配列がデフォルト(倍精度)の場合だと30fps強、整数だと50fps強という結果だった(ダブルバッファで描画した場合)。
BG画面は直接ファイルに書き込む命令はないが、BGSAVE/BGLOADで配列への保存/配列からの読み込みができる。SAVE/LOADは配列に対しても利用可能なので、ワンクッションはさめばBG画面のファイル入出力も可能だ。
そのほか、プチコンmkIIのMEMリソースの代用としては同じくSAVE/LOADを使った文字列保存/読み込み機能が利用できる。なお、カラーパレット機能は廃止されているため、プチコンmkIIのCOLに相当するリソースはない。
説明(1/3)
ファイルの保存
・実行時、確認のダイアログが表示される
引数
リソース名:
保存するリソースを指定
省略時:カレントプログラムSLOT
PRG0〜PRG3:プログラムSLOT(PRG=PRG0)
GRP0〜GRP5:グラフィックページ
ファイル名
保存するファイルに付ける名前
説明(2/3)
文字列変数をテキストファイルに保存
引数
ファイル名
保存するファイルに付ける名前(先頭に"TXT:"を付ける)
文字列変数
保存するテキストデータの格納された文字列変数(UTF-8)
説明(3/3)
数値配列をバイナリファイルに保存
引数
ファイル名
保存するファイルに付ける名前(先頭に"DAT:"を付ける)
数値配列
保存するデータの格納された数値配列
説明(1/4)
ファイルの読み込み
・実行時、確認のダイアログが表示される
・実行中のプログラムと同じSLOTへのロードはできない
・他のSLOTに読み込まれたプログラムの変数・ラベル・命令を参照するには、一度RUN/EXEC命令で実行するか、USE命令で使用可能にしておく必要がある
引数
リソース名
読み込み先のリソースを指定
省略時:カレントプログラムSLOT
PRG0〜PRG3:プログラムSLOT(PRG=PRG0)
GRP0〜GRP5:グラフィックページ
ファイル名
読み込むファイル名
ダイアログ表示フラグ
FALSE=LOAD用のダイアログを表示させない
(著者注:連載第2回で紹介したときから仕様が変更されています)
説明(2/4)
テキストファイルを文字列変数に読み込む
・実行時、確認のダイアログが表示される
引数
ファイル名
読み込むテキストファイル名(先頭に"TXT:"を付ける)
ダイアログ表示フラグ
FALSE=LOAD用のダイアログを表示させない
文字列変数
読み込んだテキストファイルが格納される文字列変数
文字列変数=LOAD("TXT:ファイル名")[,ダイアログ表示フラグ]
説明(3/4)
テキストファイルを文字列変数に読み込む(関数タイプ)
・実行時、確認のダイアログが表示される
引数
ファイル名
読み込むテキストファイル名(先頭に"TXT:"を付ける)
ダイアログ表示フラグ
FALSE=LOAD用のダイアログを表示させない
文字列変数
読み込んだテキストファイルが格納される文字列変数
説明(4/4)
バイナリファイルを数値配列に読み込む
・実行時、確認のダイアログが表示される
引数
ファイル名
読み込むバイナリファイル名(先頭に"DAT:"を付ける)
数値配列
読み込んだバイナリファイルが格納される数値配列
ダイアログ表示フラグ
FALSE=LOAD用のダイアログを表示させない
説明
画像を配列へコピー(画面全体)
引数
転送元ページ
0〜5(GRP0〜GRP5) 省略時:現在の描画ページ
※ 初期状態ではGRP4にSPRITE用キャラ、GRP5にBG用キャラが存在しているので注意
X,Y,幅,高さ
コピー元範囲の始点X座標,始点Y座標,幅,高さ(ドット)
省略時:現在の描画領域
転送先配列
画像を格納する配列変数
※ 配列の要素が不足する場合、1次元配列に限り自動追加される
色変換フラグ
1:色情報をGCOLORなどで指定する色コードに変換
0:色変換しない(本体の内部表現のまま)
説明(1/2)
画像データを配列からグラフィック画面にコピー
引数
X,Y
コピー先範囲の始点座標
幅,高さ
コピー先範囲の幅・高さ(ドット)
画像配列
GSAVEによって画像データが格納された数値配列
色変換フラグ
1:色情報をGCOLORなどで指定する色コードに変換
0:色変換しない(本体の内部表現のまま)
コピーモード
TRUE(1):透明色をコピーする FALSE(0):透明色をコピーしない
説明(2/2)
画像データを配列からグラフィック画面にコピー(インデックスカラー扱い)
引数
X,Y
コピー先範囲の始点座標
幅,高さ
コピー先範囲の幅・高さ(ドット)
画像配列
GSAVEによって画像データが格納された数値配列
パレット配列
パレットデータが格納された数値配列
色変換フラグ
1:色情報をGCOLORなどで指定する色コードに変換
0:色変換しない(本体の内部表現のまま)
コピーモード
TRUE(1):透明色をコピーする FALSE(0):透明色をコピーしない
説明
グラフィック表示ページと操作ページの指定
引数
表示ページ
0〜5:GRP0〜GRP5
操作ページ
0〜5:GRP0〜GRP5
初期状態ではGRP4にSPRITE用キャラ、GRP5にBG用キャラが存在しているので注意
説明
他のグラフィックページから画像をコピー
引数
転送元ページ
0〜5(GRP0〜GRP5) 省略時:現在の描画ページ
※ 初期状態ではGRP4にSPRITE用キャラ、GRP5にBG用キャラが存在しているので注意 始点X,Y 終点X,Y
コピー元範囲の始点座標と終点座標(X:0〜399,Y:0〜239)
転送先X,Y
コピー先範囲の始点座標(X:0〜399,Y:0〜239)
コピーモード
0:透明色をコピーしない 1:透明色をコピーする
説明
BGスクリーンの内容を数値配列へコピー
引数
レイヤー
コピー元のレイヤー番号:0〜3
始点X,始点Y
コピー元範囲の始点座標(キャラ座標)
幅,高さ
コピー元範囲の幅・高さ(キャラ単位)
※ 範囲指定を省略した場合、BGスクリーン全体が対象となる
数値配列
データがコピーされる数値配列
※ 要素が不足する場合、1次元配列に限り要素が自動追加される
説明
配列からBGデータをBGスクリーンにコピー
引数
レイヤー
コピー先範囲のレイヤー番号:0〜3
始点X,始点Y
コピー先始点座標(キャラ座標)
幅,高さ
コピー先範囲の幅・高さ(キャラ単位)
※ 範囲指定を省略した場合、BGスクリーン全体が対象となる
数値配列
BGSAVEによってBGデータが格納された数値配列
次回はマイク入力を紹介する。
「日刊!プチコン3号」で取り上げて欲しいネタや疑問、質問、感想は、ハッシュタグ「#nikkan_petitcom3」をつけてツイート! ライターの瓜生氏がたぶん(連載の中で)答えてくれるぞ。
Copyright © ITmedia, Inc. All Rights Reserved.