この章では、HSP3から追加された、少し高度な描画処理を行う命令を紹介します。 まずは、ウィンドウ内スクロールを行う上で役に立つ描画基点を変更する命令から。
| groll X座標, Y座標 | |||
| X座標 | 基点とするX座標を指定する。 | ||
| Y座標 | 基点とするY座標を指定する。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// スクロール用の描画データを作成 screen 0, 1200, 900, , , , 400, 300 redraw 0 x = 0, 0 : y = -1, 0 repeat ginfo_sx + ginfo_sy hsvcolor cnt / 3, 255 - cnt / 192 * 20, cnt / 20 + 150 x = x.0 + (cnt < ginfo_sx), x.1 + (cnt >= ginfo_sy) y = y.0 + (cnt >= ginfo_sx), y.1 + (cnt < ginfo_sy) line x, y, x.1, y.1 loop color repeat 100 pos cnt \ 6 * 200 + 50, cnt / 6 * 150 + 30 + (cnt \ 2 * 80) : mes "スクロールしてね" loop redraw 1 // ドラッグ&ドロップ受付開始 repeat p = mousex + ginfo_vx, mousey + ginfo_vy wait 1 stick k, 256 if k & 256 { groll p.0 - mousex, p.1 - mousey title "" + ginfo_vx + ", " + ginfo_vy } loop |
| grect X座標, Y座標, 角度, 横幅, 高さ | |||
| X座標 | 矩形の中心X座標を指定する。 | ||
| Y座標 | 矩形の中心Y座標を指定する。 | ||
| 角度 | ラジアンを単位とする回転角度を指定する。 | ||
| 横幅 | 矩形の横幅を指定する。 | ||
| 高さ | 矩形の高さを指定する。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
buffer 1, 1600, 1200 s = 100 x = ginfo_winx / s : y = ginfo_winy / s repeat x * y color cnt \ x * (256 / x), 200 - cnt / x * (256 / x) boxf cnt \ x * s, cnt / x * s, (cnt \ x + 1) * s, (cnt / x + 1) * s loop gsel 0 osize = 200, 200 // 物体サイズ opos = ginfo_winx / 2, ginfo_winy / 2 // X位置, Y位置 orad = 0 // 回転角度 omove = 5, 5 // X移動量, Y移動量 gosub *draw repeat p = mousex + vx, mousey + vy wait 2 stick k, 256 if (k & 256) ! 0 & (p.0 ! mousex + vx | p.1 ! mousey + vy) { vx = limit(p.0 - mousex, 0, 1600 - ginfo_winx) vy = limit(p.1 - mousey, 0, 1200 - ginfo_winy) } gosub *draw loop *draw title "" + vx + ", " + vy redraw 0 pos 0, 0 : gcopy 1, vx, vy, ginfo_winx, ginfo_winy grect opos.0 - vx, opos.1 - vy, 3.14 * orad / 180, osize.0, osize.1 // 回転させた矩形を描画 redraw 1 if omove.0 < 0 & opos.0 - vx + omove.0 - osize.0 / 2 < 0 : omove.0 = 5 if omove.0 > 0 & opos.0 - vx + omove.0 + osize.0 / 2 > ginfo_winx : omove.0 = -5 if omove.1 < 0 & opos.1 - vy + omove.1 - osize.1 / 2 < 0 : omove.1 = 5 if omove.1 > 0 & opos.1 - vy + omove.1 + osize.1 / 2 > ginfo_winy : omove.1 = -5 opos = opos.0 + omove.0, opos.1 + omove.1 orad += 3 return |
| grotate ウィンドウID, X座標, Y座標, 角度, 横幅, 高さ | |||
| ウィンドウID | コピー元画像が格納されたウィンドウIDを指定する。 | ||
| X座標 | コピー元の基点となる左端座標を指定する。 | ||
| Y座標 | コピー元の基点となる上端座標を指定する。 | ||
| 角度 | ラジアンを単位とする回転角度を指定する。 | ||
| 横幅 | gmode命令の横幅を指定サイズに変倍する。省略時に等倍コピー。 | ||
| 高さ | gmode命令の高さを指定サイズに変倍する。省略時に等倍コピー。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
buffer 1 picload "sample/demo/sky_bg.jpg" win.0 = ginfo_winx, ginfo_winy buffer 2 picload "sample/demo/logop.bmp" win.2 = ginfo_winx, ginfo_winy gsel 0 gmode 2, win.2, win.3 // 黒色(0,0,0)を透過させてコピーサイズを回転体に指定する repeat rad = 3.14 * cnt / 180 redraw 0 pos 0, 0 : gcopy 1, , , win.0, win.1 pos win.0 / 2, win.1 / 2 : grotate 2, , , rad // ウィンドウ中央に等倍コピー redraw 1 wait 1 loop |
| gsquare ウィンドウID, 貼付先X情報, 貼付先Y情報, コピー元X情報, コピー元Y情報 | |||
| ウィンドウID | コピー元画像が格納されたウィンドウIDを指定する。 | ||
| 貼付先X情報 | 貼付先4座標を配列変数(0:左上X 1:右上X 2:右下X 3:左下X)に格納して指定する。 | ||
| 貼付先Y情報 | 貼付先4座標を配列変数(0:左上Y 1:右上Y 2:右下Y 3:左下Y)に格納して指定する。 | ||
| コピー元X情報 | コピー元4座標を配列変数(0:左上X 1:右上X 2:右下X 3:左下X)に格納して指定する。 | ||
| コピー元Y情報 | コピー元4座標を配列変数(0:左上Y 1:右上Y 2:右下Y 3:左下Y)に格納して指定する。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
buffer 1 picload "sample/hspdx/testchr.bmp" gsel 0 zoom = 4 gpos = 200, 100 cx = 256, 320, 320, 256 cy = 64, 64, 128, 128 px = gpos.0, zoom * (cx.1 - cx.0) + gpos.0, zoom * (cx.1 - cx.0) + gpos.0, gpos.0 py = gpos.1, gpos.1, zoom * (cy.2 - cy.0) + gpos.1, zoom * (cy.2 - cy.0) + gpos.1 gosub *draw repeat p = mousex, mousey wait 1 stick k, 256 if (k & 256) ! 0 { x = (zoom * (cx.1 - cx.0) / 2 + gpos.0 < mousex) // 画像中心より右側か y = (zoom * (cy.2 - cy.0) / 2 + gpos.1 < mousey) // 画像中心より下側か no = x + y * 2 + (x = 0 & y ! 0) - (x ! 0 & y ! 0) // 左上:0 右上:1 右下:2 左下:3 px.no += mousex - p.0 py.no += mousey - p.1 gosub *draw } loop *draw redraw 0 color 255, 255, 255 : boxf gsquare 1, px, py, cx, cy // 伸縮させた画像を貼り付ける redraw 1 return |
| gradf 左上X, 左上Y, 横幅, 縦幅, モード, 開始色, 終了色 | |||
| 左上X | 矩形左上のX座標を指定する。 | ||
| 左上Y | 矩形左上のY座標を指定する。 | ||
| 横幅 | 塗り潰す横幅サイズを指定する。 | ||
| 縦幅 | 塗り潰す縦幅サイズを指定する。 | ||
| モード | グラデーションする方向(0:横, 1:縦)を指定する。 | ||
| 開始色 | 矩形左上の色をRGBカラーコードで指定する。 | ||
| 終了色 | 矩形右下の色をRGBカラーコードで指定する。 | ||
1 2 3 4 5 |
gradf 50, 100, 50, 300 // 「boxf 50, 100, 99, 399」と同じ gradf 150, 100, 50, 300, 0, 0xFF gradf 250, 100, 50, 300, 0, , 0xFF gradf 350, 100, 50, 300, 1, 0xFF gradf 450, 100, 50, 300, 1, , 0xFF |