パレットモード
パレット(約1677万色中256色)の色だけを使えるウィンドウの作成としてscreenがあります。
書式は「screen ウィンドゥID,横幅,高さ,画面モード,位置X方向,位置Y方向,実際幅,実際高さ」です。
ウィンドウIDはアニメーション編でも出てきた0〜31の32個まで作成できるウィンドウです。
横幅と高さは初期化したいサイズ(ドット単位)です。
画面モードが1677万色すべてを使用するフルカラーか、256色同時に使えるかを選択します。
0か省略をするとフルカラーモード、1を指定すると256色のみを使えるパレットモードとなります。
画面が元々256色までしか利用できないものとなっている場合は、見え方はそのままです。
位置XとYは画面左上を(0,0)とし、どこにウィンドウの左上を基点にするかを指定します。
実際幅と高さは実際に表示される幅と高さです。p2,p3とさほど変わりません。
横幅と高さでも実際に表示される幅と高さが変わりますので。
bgscr命令というのもscreen命令と同じウィンドウを初期化する命令で、パラメータも同じです。
何が違うのかというとウィンドウっぽくなくタイトルバーやウィンドウ枠がありません。
今までのようにウィンドウの移動や[×]ボタンを押したり最小化したりすることが出来ません。
デスクトップアクセサリーのように普通のウィンドウとして表示したくない場合などに使いましょう、
FAQにも載せてますが、使用するときのウィンドウIDは2以降を使いましょう。
この章ではパレットモードの場合の話を書いていきます。
パレットモードの場合、getpalとpalcolorとpalcopyとpaletteとpalfade命令が使用できます。
palfade命令ですがパレットを使用した画面を更新するにも必要となります。
書式は「palfade 輝度変更値,始まりパレット,終わりパレット」となります。
輝度変更値は−256〜256で、−256に近いほどパレットが暗く、256に近いほど明るくなります。
これは一時的なもので後で0を指定することにより元の色に戻ります。
始まりのパレットに明るさを変更したいパレットを指定します。省略時は0となります。
終わりパレットに変更をする最後のパレットを指定します。省略時は255となります。
始まり〜終わりの間のパレットの明るさが輝度変更値分だけ変わります(フェードイン・アウト)。
screen 0, , , 1 ; p2省略で640、p3省略で480のことになる
palfade -150 ; パレット0〜255(すべて)が暗くなる
stop
実行すると…暗くなりませんね?
ウィンドウをドラッグ(タイトルバーをクリックしたまま)で一部画面外に出してドロップ(離し)、
元の位置に再度ドラッグ&ドロップしてみてください。
画面外に出したところだけが暗くなっていることが確認できると思います。
パレットを使用した画面を更新する効果があると書きましたが、ココまでは変わらないようです。
では画面を実際更新する命令redrawを使ってみましょう。
screen 0, , , 1
palfade -150
redraw
stop
今度は全部が一度に変色していますね?
palfade命令はこれくらいでgetpal命令に入ります。
書式は「getpal パレット番号」で、rval,gval,bvalに色の知りたいパレットの赤緑青輝度が入ります。
同じウィンドウのパレットしか取得することができません。
screen 0, 758, 200, 1
repeat 256 ; すべてのパレットの輝度を取得
getpal cnt
color rval, gval, bval
boxf cnt * 3, 0, cnt * 3 + 3, 200 ; 取得した輝度で描画
loop
stop
colorで色を変更していますが、palcolorでも描画色を変更できます。
書式は「color パレット番号」で指定したパレットの色を描画色とします。
screen 2, 758, 200,1
repeat 256
palcolor cnt
boxf cnt * 3, 0, cnt * 3 + 3, 200
loop
stop
上記のようにgetpalとcolor命令を使用しなくても同じようにできます。
palette命令で好きなパレットの色を指定した輝度の色に変更することも可能です。
書式は「palette パレット番号,赤輝度,緑輝度,青輝度」です。
screen 0, 400, 100, 1
pos 0, 5 : mes"赤輝度"
pos 0,30 : mes"緑輝度"
pos 0,55 : mes"青輝度"
pos 50, 0 : input red, 40, 25, 3
pos 50,25 : input green,40, 25, 3
pos 50,50 : input blue, 40, 25, 3
objsize 90,25
pos 0,75 : button "変更", *chng
stop
*chng ; 文字が入っていても数値の0とする
int red ; 後で説明
int green ; 後で説明
int blue ; 後で説明
if (red < 0) | (red > 255) : dialog "赤輝度が範囲外です\n0〜255で指定してください" : stop
if (greee < 0) | (green > 255) : dialog "緑輝度が範囲外です\n0〜255で指定してください" : stop
if (blue < 0) | (blue > 255) : dialog "青輝度が範囲外です\n0〜255で指定してください" : stop
palette 0, red, green, blue ; パレット0を指定色に変更
palcolor 0 ; 描画色をパレット0にする
boxf
palfade 0 ; 後ほど説明
redraw
stop
オブジェクト以外を指定した色で塗りつぶします。
pallete命令はpalfade命令を使って画面を更新しなければなりません。
更新しなければ1回は変更されるものの、思った色にはならないと思います。
パレットについての最後の命令としてpalcopy命令を説明します。
パレットモードのウィンドウのパレットは初めに表示した画像の色で生成されます。
次の画像を表示するときは先ほどのパレットが使われますのでパレットにない色は思った色にはなりません。
パレット内の一番似た色が使用されますので色あせた様に見えます。
palcopy命令の書式は「palcopy ウィンドウID」となります。
p1で指定したウィンドウのパレットに変更することができます。
違うウィンドウやバッファから画像をコピーするときにはこの命令を使うようにしましょう。
コピー元ウィンドウがパレットモードではなくフルカラーだった場合、
palcopy命令を使用してもものすごく色あせてしまいます。これだけはどうしようもありません。