ワンポイントテクニック No.018
LINE文でキャラ表示をする
LINE文ではLINE(X座標1,Y座標1)-(X座標2,Y座標2),式において式の部分を変更することで自由な破線を描くことができます。この式の値は1〜63335の間で指定でき、指定することで16ドット単位で描く破線をドットごとにONとOFFのパターン指定ができます。これを利用すればLINE文でキャラを描くことも可能になります。
LINE(X座標1,Y座標1)-(X座標2,Y座標2),式,BFにおいて描く四角形が縦×横で16ドット以下ならば自由にドットのONとOFFが可能になり、言い換えれば描くキャラを自由に設定できるわけです。
今回は縦×横16ドットの中から4×4と3×5のキャラを描く方法を書いてみます。式に入れる値の下位ビットから順番に指定していった場合、下記のような順番に描かれていきます。
4×4のキャラ
8 | 7 | 6 | 5 |
4 | 3 | 2 | 1 |
16 | 15 | 14 | 13 |
12 | 11 | 10 | 9 |
3×5のキャラ
8 | 7 | 6 |
5 | 4 | 3 |
2 | 1 | 16 |
15 | 14 | 13 |
12 | 11 | 10 |
上記のデータを使いこのような人型のキャラを描くとします。
このキャラを上位ビットから2進数で記すとこのようになります。
16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 |
あとは、これを10進数もしくは16進数に変換すればLINE文で描くことができます。
0101101001011101(2進数)=5A5D(16進数)=23133(10進数)
それをLINEで表記するには破線のパラメータ部分に上記の16進数(もしくは10進数)の数値を入れるだけです。
LINE (0,0)-(2,4),&5A5D,BF もしくは LINE (0,0)-(2,4),23133,BF
これによってGPRINTにある縦8ドットの制約がなくなり、自由なサイズのキャラを使ったゲームを作ることが可能になります。あとLINE文の特性として2キャラの重ね合わせも可能になります。
ただし、LINE文はGPRINTと比較すると表示が遅い(4×4のキャラの表示に26m秒かかるので8×8のキャラをGPRINTで表示した場合の19m秒と比べて面積あたりでは5倍以上遅い)上にキャラの移動のためにはLINE文(R,BFオプション)で消去の必要があるためにさらに遅くなってしまうという問題があるし、メモリも多く必要になるという問題もあります。。したがって、LINE文を使用するのは必要最小限に抑え、可能な限りはGPRINTを使用する方が良いと思います。
RETURN