Last Update : 2009/02/xx
HSPで色(カラー)を指定する命令です。命令名の由来はそのまま「color」から。
color 赤の輝度, 緑の輝度, 青の輝度
第1パラメータには赤(red)の輝度、第2パラメータには緑(green)の輝度、第3パラメータには青(blue)の輝度の数値を指定します。範囲はそれぞれ0〜255です。省略した場合は0を指定したことになります。RGB値はいわゆる「光の三原色」です。
逆に指定されてる色をスクリプトから取得するには、ginfo関数(タイプ16〜17)か、マクロ定義のginfo_r、ginfo_g、ginfo_bを利用します。
◆ 注意点!
この命令を使って色を反映させることができるのは、文字を描画するmes命令(print命令)、1ドットの点を描画するpset命令、1本線を描画するline命令、四角形を描画するboxf命令といったところです。HSP3では、円を描画するcircle命令、回転した四角形を描画するgrect命令も含まれます。
ボタン(button命令)、チェックボックス(chkbox命令)、リストボックス(listbox命令)、コンボボックス(combox命令)、入力ボックス(input命令)、メッセージボックス(mesbox命令)のようなオブジェクトの背景色や文字色、各種ダイアログボックスを表示するdialog命令の文字色はいっさい指定できません。
ただ、オブジェクトに関しては、Win32 API関数を駆使して実現できるものもあります。(→
参照、HSP3 あれこれ オブジェクト編)
適当なサンプルスクリプト。文字を描画するmes命令を利用して表示色を指定します。背景色を変えたい場合はboxf命令を利用します。
color 255 mes "あか" color , 255 mes "みどり" color , , 255 mes "青"
color mes "くろ" boxf 0, 50, 50, 100 color 255, 255, 255 pos , 50 mes "しろ"
グラデーション効果で図形の描画命令を利用する。
// グラデーション効果 (by Kpan) repeat 256 color 255 - cnt line 0, cnt, 100, cnt color , 255 - cnt line 100, cnt, 200, cnt color , , 255 - cnt line 200, cnt, 300, cnt wait 1 loop repeat 50 color 255 - cnt * 4 circle 0 + cnt, 300 + cnt, 100 - cnt, 400 - cnt color , 255 - cnt * 4 circle 100 + cnt, 300 + cnt, 200 - cnt, 400 - cnt color , , 255 - cnt * 4 circle 200 + cnt, 300 + cnt, 300 - cnt, 400 - cnt wait 1 loop
文字列の一部のフレーズの文字色を別のものに変更したい場合は、pos命令で描画位置を変更して、複数回に分けてmes命令を行う形になります。ginfo関数のタイプ14・15(マクロ定義でginfo_mesx・ginfo_mesy)は文字列の出力サイズ、タイプ22・23(マクロ定義でginfo_cx・ginfo_cy)はカレントポジションが返るので、これをpos命令に反映させます。
// 一部のフレーズの文字色を指定 (by Kpan) pos 100, 100 mes "こんにちは。" posisionX = ginfo(22) + ginfo(14) ; X方向の出力サイズ+カレントポジション posisionY = ginfo(23) - ginfo(15) ; Y方向のカレントポジション−出力サイズ pos posisionX, posisionY color $FF mes "HSPプログラミング" posisionX += ginfo(14) pos posisionX, posisionY color mes "の世界へようこそ。"
// 一部のフレーズの文字色を指定、もっと実践的なものに (by Kpan) font "MS ゴシック", 30, 16 ; 天気の色用 配列変数 clr_tenki.0 = $FF, $00, $00 ; 赤 clr_tenki.3 = $00, $00, $FF ; 青 clr_tenki.6 = $80, $80, $80 ; グレー ; 天気の文字用 配列変数 str_tenki = "はれ", "あめ", "くもり" combox value, 100, ""+str_tenki.0+"\n"+str_tenki.1+"\n"+str_tenki.2+"" button "天気", *change stop *change redraw 0 color $FF, $FF, $FF boxf pos 100, 100 color if rnd(2) { mes "ハイ、今日は" } else { mes "昨日は" } posisionX = ginfo(22) + ginfo(14) posisionY = ginfo(23) - ginfo(15) pos posisionX, posisionY color clr_tenki(value * 3), clr_tenki(value * 3 + 1), clr_tenki(value * 3 + 2) mes str_tenki(value) posisionX += ginfo(14) pos posisionX, posisionY color mes "だよ〜ん。" redraw