さて、引っ張りまくった pos 命令をやっと説明できます。
pos 命令は、カレントポジションを変更する命令です。
print "カレントポジションは(0, 0)" pos 600, 400 mes "(600, 400)" stop
カレントポジションとは、画面に何かを配置(?)するときの、
左上の座標のことです。
mes 命令や button 命令などは、このカレントポジション
のあるところに表示されます。
カーソルみたいなものです。
ちなみに、この pos 命令のパラメータの数値は、dot単位です。
ドット[dot] って?
PCやTVのディスプレイ(画面)が「赤・緑・青」という
光の三原色で映し出されているのは知っていましたか?
HSPもコンピュータの画面に表示されるので、当然同じ方法で映されています。
上の図のような「赤緑青」が連続すると、こんなにきれいに映せるんですね〜。
さて、単位 Dot とは、この「赤・緑・青」の1セットの大きさです。
ちなみに、HSPのスクリプトを実行したときに出てくるウィンドウの大きさは 640dot×480dot となっています。
テレビに顔を思いっきり近づけると、見えますよ。痛いですが。
今回は画面上のレイアウトを考えていきたいと思います。
簡単なので、気楽にいきましょ〜。
当然、真っ白な画面に真っ黒な文字は嫌ですよね。
そこで、「色」を付けていきたいと思います。
色を変える命令は……
color!!
; 色の輝度を変数に代入 randomize ; rnd 関数を使用する場合は、必ず前の方に置いておきます。 red = rnd(256) ; 0 〜 255 のいずれかが代入されます。 green = rnd(256) blue = rnd(256) title "色を付けよう!" objsize 640/3, 480/3 ; オブジェクトの大きさを変更 button "赤輝度変更", *Change_Red button "緑輝度変更", *Change_Green button "青輝度変更", *Change_Blue *main ; メインです redraw 2 ; 描画モードを 0 (off) にする。 color red, green, blue ; 赤・緑・青 の順、大きいほど色が鮮やか boxf ; 画面を塗りつぶす。オブジェクトは消えません。 color 0, 0, 0 ; 次の文字のために、描画色を黒にする。 pos 400, 50 ; 2回目以降、ここに来るたびに位置を修整。 mes "現在の赤輝度は"+ red +"です。" mes "現在の緑輝度は"+ green +"です。" mes "現在の青輝度は"+ blue +"です。" redraw 1 ; 描画モードを1にもどし、画面を更新。 stop ; いったん処理を止めます。 *Change_Red red = rnd(256) ; 適当に変えます。 goto *main ; *main に戻ります。 *Change_Green green = rnd(256) ; 適当に変えます。 goto *main ; *main に戻ります。 *Change_Blue blue = rnd(256) ; 適当に変えます。 goto *main ; *main に戻ります。
ボタンを押すと色が変わるサンプルです。
いろいろ新しい命令が出てきましたね。
それに、意味不明な rnd関数というものも登場しました。
さて、頑張りましょう……
*main の上にある objsize 命令は、ボタンなどのオブジェクトの
大きさを設定する命令、ということで理解しておいてください。
描画[びょうが]モードとは、HSPが画面に何かを「描く(= 描画する)」ときの設定です。
単純に 0 か 1 しかなく、初期設定では 1 になっています。
どう違うのでしょうか?
0 の場合、画面になにかが描画されても、ユーザーが見る画面は変わらないのです!
どういうことかというと、
redraw 0 ; 描画モードを 0 にする。 mes "見えません!"
ということです。
なので、redraw 命令は、描画モードを変更する命令です。
redraw 0 + 2 ; +2 すると、画面を更新しません mes "始まってすぐに描画されたのに……" wait 100 ; 1秒止まる redraw 3 ; 画面を更新しない (1 + 2) mes "後続部隊" ; 現在の描画モードは1 wait 150 redraw 1 ; 画面更新 ( 1 は省略可能 ) stop
見ての通り、最初の mes 命令は実行されていましたが、
描画モードが 0(off) なので更新はされず、
「redraw 3(1 + 2)」で、描画モードだけを変更、
次の mes 命令は実行され、
さらに 1.5 秒経過してから「redraw 1」で画面を更新しました。
ところで、これに何の意味があるのでしょう?
無駄なことをしているようにしか見えませんが……
title "流星" repeat 321 ; redraw 2 ; をここに入れる場合と入れない場合と color ; 省略して書くと、0, 0, 0 と同じになる boxf ; 画面を一色で塗りつぶす命令です。 color 255, 255, 255 ; 白 pos x, 50 + y mes "★" x ++ ; 移動 ( x = x + 1 または x += 1 です ) y ++ ; 下にも動く ; redraw 1 ; redraw 2 があるなら「;」を外す await 1 ; 速度を調節( ゲーム向けのwait命令 ) loop stop
redraw 命令が無い場合、けっこうちらついたと思います。
実際、もっとレベルの高い「シューティングゲーム」なんかは、
この命令を使わないと評価が
論外
となるでしょう。
さて、話をサンプルに戻してと。
始めのサンプルにある rnd関数 とは、
0 〜 (引数-1) の内どれかの整数を返す関数です。
関数とは、詳しくは後でやりますが、ちょっと変わった命令と覚えておいてください。
関数名(引数1, 引数2, …)
という形で書きます。
ただし、命令のように書いてはいけません。
必ずパラメータの中や、変数に代入するときの右辺に記述してください。( つまり式の中 )
randomize 命令は、rnd関数を、ランダムにするために必要な命令です。
一つのスクリプトの中に1つだけ実行すればいいので、先頭にでも置いておいてください。
ずーっと同じ大きさの文字。これはちょっと嫌ですよね。
大きさを変えられないとレイアウトもへったくれも無いです。
と言うわけで、文字のフォント(書体、大きさ)を変えてみましょう。
それには、効果そのまま font 命令を使用します。
mes "通常フォント" print "" ; 改行っぽい事が出来ます。"" は省略可 font "MS 明朝", 20 ; 明朝体に変更 mes "明朝体で〜す" print font "MS ゴシック", 32 ; フォント名に注意 mes "大きさは第二パラメータに指定" print font "MS ゴシック", 70, 1 mes "ビバ・プログラ広場" print font "MS ゴシック", 30, 4 ; 第三パラメータで文字を装飾 mes "ここテストに出まーす。" stop
font 命令については、特に難しいことが無いので、ワンキーヘルプに目を通しておけばOKだと思います。(テキトー)
Number | Eeffect | SAMPLE |
---|---|---|
1 | 太字 | プログラ広場 |
2 | 斜体 | Coming Soon... . |
4 | 下線 | ここ重要でっせー |
8 | 取り消し(訂正) | ご応募お待ちしております!(2008年12月31日〆切り) |
16 | アンチエイリアス | (再現不可) |
さっき無視してしまった輝度について、ちょこっとだけ触れておきましょう。
輝度には 赤輝度・緑輝度・青輝度 があります。
これは単なる数値で、0 〜 255 までしかありません。
この数値が大きいほど、色が濃いという事になります。
ただし、色が暗くなるのはその真逆で、数値が小さいほど黒に近い色になります。
※間違い、訂正などあれば掲示板の方で指摘してください。
※2008 9/14 追記分
↑のcolor命令は、RGB という「色の3原色」を使って、描画色を変更しました。
今度は、「色の三属性」というものを使って、描画色を変えてみます。
; 色相サンプル ( いくつか説明してませんが、気にしない方向でお願いします ) redraw 2 repeat 640 hsvcolor cnt, 255, 255 line cnt, -1, cnt, 480 loop redraw 1 stop
彩度は、色の「鮮やかさ」です。これが小さいと、色が薄くなります。
逆に大きすぎると、先ほどのサンプルのように変になります。
hsvcolor のパラメータを「0, cnt / 2, 255」 にしてみてください。
明度は見たとおり色の「明るさ」です。
これが小さければ、どんなに鮮やかでも、暗い色になります。
hsvcolor の p3 を 128 にしてみてください。
hsvcolor 命令が、三属性を用いて描画色を変える命令です。
この命令は、色の指定が若干難しいですが、color 命令よりも鮮やかな描画が可能です。
グラデーション、といいますよね。
ゲームでは重要になることでしょう。( と、ゲーム作らない僕が言ってみる )
最近では、ツールにもグラデーションが取り入れられて、格好良くなっているものも多いです。
※2009 01/19 追記分
画面に描画する命令がboxfだけではさすがに不便なので、
他もいくつか紹介しておきます。
// 画面一杯の楕円 circle // 謎の矩形 color , 255 boxf 400, 200, 600, 400 color ,, 255 boxf 450, 250, 550, 380 // 平行四辺形を描画 color 255, 255, 255 line 130, 130, 360, 360 wait 50 line 130, 170 line 360, 400 line 360, 360 // 各頂点を赤い点にする color 255 pset 130, 130 pset 130, 170 pset 360, 360 pset 360, 400 // 指定座標の色を得るループ repeat pget mousex, mousey title "RGB = ("+ ginfo_r +", "+ ginfo_g +", "+ ginfo_b +")" await 12 loop
ではでは、相当長くなってしまったんで、
そろそろお開きとしましょうか。
命令まとめぇ〜〜〜〜。
命令 | 効果 |
---|---|
pos | カレントポジションを変える |
color | 描画色を変える |
boxf | 矩形[くけい]を塗りつぶす。(矩形 … 長方形のこと) |
circle | 楕円を描画する。 |
line | 直線を引く。 |
pset | 点の色を変える。 |
pget | 画面の点の色を取得する。 |
redraw | 描画モードを変える (+2 すると更新しない) |
font | 文字の大きさを変える |
hsvcolor | 描画色を変える (色の三属性を使う) |
syscolor | システムカラーを使う |
by 上大