この項目では描画命令について勉強していきます。ようやくHSPな感じがしてきました。
1. カレントポジションとカレントカラー
HSPには「カレント○○」という考え方があります。一つの命令や関数にたくさんの引数を設定して毎回事細かに設定をするのではなく、現在の設定を変更して、その設定で描画などの命令を実行します。まずは、カレントポジションとカレントカラーについてです。流石に、英語の説明はいいですよね。カレントポジションとはその名の通りスクリーン上でどこに描画するのかという設定で、カレントカラーとはどの色で描画するのかという設定です。これらを設定する命令が「pos」と「color」という命令です。これらの命令を使った例をあげます。
// posとcolorの例
repeat 5
pos cnt*80, cnt*80
color (cnt*50) \ 256, (cnt*50 + 80) \ 256, (cnt*50 + 160) \ 256
mes "メッセージが動く"
loop
実行すると次の画像のようになります。赤い丸はカレントポジションで目印として画像にあとから描き足しました。このように、カレントポジションとカレントカラーが変わっていることがわかると思います。
2. font
続いては、描画時のフォントについてです。文字の大きさも指定できます。フォント設定も「カレント○○」に含まれるのですが、カレントフォントとは言わないみたいです。それでは、さっきのものにfont命令を追加してみます。
// fontの例
repeat 5
pos cnt*80, cnt*80
color (cnt*50) \ 256, (cnt*50 + 80) \ 256, (cnt*50 + 160) \ 256
font "メイリオ",cnt*10
mes "メッセージが動く"
loop
このプログラムを実行するとfont命令の動作がわかると思います。
3. screenとgsel
続いてはウィンドウについてです。HSPで生成されるウィンドウにはウィンドウIDという番号がついています。プログラムを実行した時に自動的に生成されるウィンドウIDは「0」です。screen命令を使うとウィンドウのサイズやウィンドウの位置を指定したり、新しいウィンドウを生成したりできます。そして、gsel命令で描画先のウィンドウを指定できます。
// screenとgselの例
screen 0,640,480,,0,0
screen 1,320,240,,600,400
gsel 0 // 描画先をスクリーン0に設定
repeat 5
pos cnt*80, cnt*80
color (cnt*50) \ 256, (cnt*50 + 80) \ 256, (cnt*50 + 160) \ 256
font "メイリオ",cnt*10
mes "メッセージが動く"
loop
gsel 1 // 描画先をスクリーン1に設定
repeat 5
pos cnt*40, cnt*40
color (cnt*50) \ 256, (cnt*50 + 80) \ 256, (cnt*50 + 160) \ 256
font "メイリオ",cnt*5
mes "メッセージが動く"
loop
4. 図形描画
今度は図形の描画になります。HSPでは様々な図形を表示することができます。以下がそれらの命令です。
| 命令 |
描画する図形 |
引数 |
| line |
直線 |
始点のx座標, 始点のy座標, 終点のx座標, 終点のy座標 |
| boxf |
矩形 |
右上のx座標, 右上のy座標, 左下のx座標, 左下のy座標 |
| circle |
円 |
右上のx座標, 右上のy座標, 左下のx座標, 左下のy座標 |
これらの命令を組み合わせることで様々な図形を表現できます。少しだけ例を示します。
// 図形描画の例
screen 0, 1024, 480
left_point = 10
right_point = 5
color
boxf 0, 0, 1024, 480
color 127,127,255
boxf 40,50,340,250
color
if(left_point<10){
pos 140,38
}else{
pos 78,38
}
font "",200,1
mes "" + left_point
shift = 400
color 255,100,100
boxf 40 + shift,50,340 + shift, 250
color
if(right_point<10){
pos 140 + shift, 38
}else{
pos 78 + shift, 38
}
font "",200,1
mes "" + right_point
5. マウス関係
マウスに関わる命令はたくさんありますが、今回は「mouse, mousex, mousey」という3つの命令を紹介したいともいます。
この命令はマウスポインタを任意の場所に動かすことができますできます。また、引数を負の数にするとポインターが非表示になります(こっちのほうがよく使う気がします)。
現在のマウスポインタの位置のx座標を返してくれます。
現在のマウスポインタの位置のy座標を返してくれます。
6. boxfの使い方
boxf命令は特別な使われ方をすることが有ります。例えば次のような使い方です。
// 図形描画の例
screen 0, 1024, 480
left_point = 0
right_point = 99
repeat
color
boxf
color 127,127,255
boxf 40,50,340,250
color
if(left_point<10){
pos 140,38
}else{
pos 78,38
}
font "",200,1
mes "" + left_point
shift = 400
color 255,100,100
boxf 40 + shift,50,340 + shift, 250
color
if(right_point<10){
pos 140 + shift, 38
}else{
pos 78 + shift, 38
}
font "",200,1
mes "" + right_point
// 得点の変更
left_point += 1
right_point -= 1
if(left_point >= 100) : break
await 33
loop
wait 200
end
8. redraw
次のプログラムを実行してみてください。
// 画面描画の例
*main
color 255,255,255
boxf
color
pos 0,0
font "", 80
mes rnd(1000)
wait 1
goto *main
少し画面がちらついて見えませんか?こんな時に使うのが、「redraw」命令になります。「redraw 0」とすると画面の更新を止めます。そして、「redraw 1」とすることで、それまでの変更を画面に反映します。
// 画面描画の例
*main
redraw 0
color 255,255,255
boxf
color
pos 0,0
font "", 80
mes rnd(1000)
redraw 1
wait 1
goto *main
最終更新:2016年04月05日 13:50