hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
Module/拡張boxf - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

拡張boxf

指定した座標を頂点(?)とする矩形内を塗りつぶします。--kz3 2005-06-02 10:48:00 (木)

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
 
 
 
 
 
 
 
 
 
 
#module
#deffunc boxfex int,int,int,int
    mref p1,0
    mref p2,1
    mref p3,2
    mref p4,3
    if p1>p3 : s=p1:p1=p3:p3=s
    if p2>p4 : s=p2:p2=p4:p4=s
    boxf p1,p2,p3-1,p4-1
return
#global

サンプル

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
 
 
 
 
 
 
 
 
    ;標準命令boxfで描画
    color 0,0,0
    boxf 0,0,0,0        ;どうなると思う?
    boxf 2,2,3,3        ;1ピクセルかな?
    boxf 8,8,5,5        ;逆だぞ?3ピクセル?
 
    ;同じ事をboxfexで描画(比較の為に右に10ピクセルオフセット)
    color 255,0,0
    boxfex 10,0,10,0    ;思い通り?
    boxfex 12,2,13,3    ;やっぱこう考えるよね。
    boxfex 18,8,15,5    ;これは使えるんじゃない?!
 
    stop
  • 実行結果
    実行結果

コメント

  • ドローツールを使用するユーザーは必ずしも左上から右下にかけてマウスをドラッグしてくれるわけではないので、どうでしょう? -- kz3 2005-06-02 10:48:33 (木)
  • 実行確認はプリントスクリーンなどでペイントソフトに貼り付けて拡大してみてください^^; -- kz3 2005-06-02 10:51:39 (木)
  • モジュールパラメータのintは値渡しなのでモジュール内で変数のコピーを作らなくても良いことを学んだので、修正しました。 -- kz3 2005-06-22 13:20:26 (水)
  • 右下から左上というふうに逆に指定すると1ドットかけるんですね、注意しとこっと。んでもドット絵の感覚では「boxf p1,p2,p3-1,p4-1」の「-1」は余計ですよ。PCの画面は数学の座標とはちょっと違います。このモジュールは数学的ですね。 -- GENKI? 2005-07-11 00:37:41 (月)
  • そうなんです、GENKIさんが書いてくれた「座標とピクセル」を読んでみるとboxfは"座標"を指定するとヘルプなどに書いてあったのでその座標を数学的座標として解釈していました。 -- kz3 2005-07-11 10:09:15 (月)
  • boxf p1,p2には矩形左上のピクセル、p3,p4には矩形右下のピクセル を指定する、と言葉をピクセルにしてみると・・・boxfの挙動に納得がいきます^^ -- kz3 2005-07-11 10:11:52 (月)
  • 座標指定を逆の順番にすると四辺が1ドットかけた四角が描画されるナゾな動作は、こんな感じの理由なのかな?とふと思いつきました。 -- GENKI? 2005-07-11 13:13:04 (月)
    • 1.座標指定順が逆なので指定領域の外側が塗りつぶしの対象になってしまう。(このとき指定した座標も塗りつぶしの対象。)
    • 2.これでは困るので、塗りつぶし領域を反転させて内側が塗りつぶされるようにしてから、実際に描画させる。
  • 単なる解釈なので、たぶん実際には違うんじゃないかと…。 -- GENKI? 2005-07-11 13:14:19 (月)
  • うーん・・・想像すらできません。。。 -- kz3 2005-07-11 15:17:34 (月)
  • む^^;票が増えてる?座標とピクセルも合わせて読むと理解が深まると思います。 -- kz3 2005-10-26 17:43:01 (水)
  • circle命令には描画モードがあるのに、boxfにはないのはなぜなんでしょう? -- GENKI? 2007-06-23 (土) 15:53:16

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

拡張boxf - 半透明

[hsp3]
半透明のboxfを描画します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
 
 
 
 
 
 
 
#module
#deffunc boxf2 int ax, int ay, int bx, int by
    pdx = ax, bx, bx, ax
    pdy = ay, ay, by, by
    gsquare -1,pdx, pdy
    return
#global

サンプル

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
 
 
 
 
 
 
color 255,0,0
boxf 200,50, 300, 300
 
color
gmode 3,,,128
boxf2 100,100, 400,200

boxf2 - 中抜きの四角形

[hsp3]
中抜きのboxfを描画します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
 
 
 
 
 
 
 
 
#module
;中抜きの四角形を描く
#deffunc boxf2 int x1, int y1, int x2, int y2
    line x1,y1, x2,y1
    line x2,y1, x2,y2
    line x2,y2, x1,y2
    line x1,y2, x1,y1
    return
#global

ポイントはline命令の終点(p1,p2)のドットは描画されないので、一定方向にまわりながら描画させるイメージでline命令を使用することです。
終点のドットを始点のドットで埋めていくイメージです。

サンプル

いつものboxf命令を使う感覚で、

boxf2 200,50, 300, 300

とすればokです。


添付ファイル:
fileboxfex.png
187件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-06-23 (土) 15:53:16 (2360d)