・データ領域として使う
例えば、ゲームで使う100*100マス程度のマップを作ろうとします。
この大きさのデータをDATA文だけで記述するのは大変です。
マップエディタを作ろうとしてもBG面(SCR形式)では64*64までしか扱えない、
MEM$は256文字までしか扱えない、KEY命令でファンクションキーにデータを入れるのも同様…
そんなときにはグラフィック面でデータのやり取りをします。
グラフィック面は256*192ドットなので1マス=1ドットとすれば余裕で入ります。
格納するデータを色番号にてしてGPSET、読み出しはGSPOIT()を使います。
(データの保存はそのままGRP形式で行います)
このようにグラフィック面は256*192=49152byte(48KB)のデータ領域として扱うこともできます。
サンプルのDRWEDやGAME6もこの方法を使っているようです。
欠点としてはグラフィック面を1面使ってしまうことですが、上画面しか使わない、
もしくは通常は変数に格納しておいて、GRPデータとして読み書きする時のみ使うのならば
それほど問題にならないと思います。
また領域をフル活用するとQRコードにする時に枚数が多くなる(50枚近くになる場合も)ので注意が必要です。
なお扱うデータが0〜255の整数のみの場合は1ドット=1データとして処理できますが、
そうでない場合は掛け算・割り算を駆使して1データ=2〜4ドットとして使用する必要があります。
・タッチなどの判定用に使う
タッチして選択するメニュー画面で、どの項目がタッチされたかを検出するには
(システムアイコンを使わない場合)タッチ座標(TCHX、TCHY)が各項目内にあるかで判断しますが、
グラフィック面とGSPOIT()を使って色(パレット番号)で判定する方法もあります。
メニュー表示用のグラフィック面と判定用のグラフィック面(以降、裏画面と表記)を用意して
各メニュー項目の描画の際、裏画面の同じ座標にGFILLなどで判定領域を書き込みます。
この時、裏画面での描画色はメニュー項目ごとに変えていきます。
画面がタッチされた場合、裏画面のタッチ座標の色をGSPOITで取得し、
そのパレット番号からどの項目をタッチしたかを判断します。
描画命令が追加される分、手間はむしろ増えるのですが、
IF (TCHX>0)AND(TCHY>0)AND(TCHX<32)AND(TCHY<32) THEN〜
のような記述を
CL=GSPOIT(TCHX,TCHY)
IF CL==0 THEN〜
IF CL==1 THEN〜
のようにでき、またパレット0番から順番に使えばON〜GOTO(GOSUB)も使えます。