|
|
2007/2/3(Sat) 20:11:17|NO.5400
半透明の矩形を描く手段を探しています。
//仮想画面上にboxfで矩形を描き、それをgcopyで半透明描画する。
buffer 1,400,100
boxf 0,0,400,100
gsel 0
gmode 3,,,128
pos 50,50 : gcopy 1,0,0,400,100
利点:分かりやすい
難点:仮想画面をわざわざ作る必要がある
//grectを用いて半透明矩形を作成
gmode 3,,,128
grect 300,150,0,400,100
利点:仮想画面不要
難点:表示場所が分かりにくい?
より良い手段はあるでしょうか?どうぞよろしくお願いします。
|
|
2007/2/3(Sat) 22:18:05|NO.5403
>より良い手段はあるでしょうか?
(//grectを用いて半透明矩形を作成)
を元にマクロを使って単純化して見ました。(角度はなくしてあります。)
こんな感じでどうでしょうか?
#define grect1(%1,%2,%3,%4) grect (%1)+(%3)/2,(%2)+(%4)/2,0,(%3),(%4)
repeat 10
color cnt*25,,255-cnt*25
boxf 0,cnt*20,640,cnt*20+9
loop
//grectを用いて半透明矩形を作成
gmode 3,,,128
color
grect1 40,40,320,240 //boxf と同じ書き方
-------------
#define grect2(%1,%2,%3,%4) grect %1+%3/2,%2+%4/2,0,%3,%4
repeat 10
color cnt*25,,255-cnt*25
boxf 0,cnt*20,640,cnt*20+9
loop
//grectを用いて半透明矩形を作成
gmode 3,,,128
color
grect2 40,40,320,240 //grect2 表示位置X,表示位置Y,大きさX,大きさY
-------------
#define grect3(%1,%2) grect ginfo_cx+%1/2,ginfo_cy+%2/2,0,%1,%2
repeat 10
color cnt*25,,255-cnt*25
boxf 0,cnt*20,640,cnt*20+9
loop
//grectを用いて半透明矩形を作成
gmode 3,,,128
color
pos 40,40 //pos で位置指定
grect3 320,240 //grect3 大きさX,大きさY
-------------
|
|
2007/2/4(Sun) 00:06:54|NO.5407
gsquare命令がいいんじゃないでしょうか。
d3moduleが参考になりました。
;##############################
#module
#deffunc boxfa int ax, int ay, int bx, int by
pdx = ax, bx, bx, ax
pdy = ay, ay, by, by
gsquare -1,pdx, pdy
return
#global
;##############################
color 255,0,0
boxf 200,50, 300, 300
color
gmode 3,,,128
boxfa 100,100, 400,200
|
|
2007/2/4(Sun) 17:25:12|NO.5421
自前で適当なベンチマークテストをしてみましたが、あまり速度に差は見られないようですね。
HSPDXFIXのes_timer命令を使用しています。
#include "HSPDXFIX.as"
;##############################
#module
#deffunc boxfa int ax, int ay, int bx, int by
pdx = ax, bx, bx, ax
pdy = ay, ay, by, by
gsquare -1,pdx, pdy
return
#global
;##############################
es_timer t_b,0
repeat 10000
redraw 0
color 255,255,255 : boxf 0,0,640,480
color 255,0,0
boxf 200,50, 300, 300
color 0,0,0
gmode 3,,,128
boxfa 100,100,400,200
redraw 1 : loop
es_timer t_n,0
dialog t_n - t_b
end
-----------------------
#include "HSPDXFIX.as"
#define grect1(%1,%2,%3,%4) grect (%1)+(%3)/2,(%2)+(%4)/2,0,(%3),(%4)
es_timer t_b,0
repeat 10000
redraw 0
color 255,255,255 : boxf 0,0,640,480
color 255,0,0
boxf 200,50, 300, 300
color 0,0,0
gmode 3,,,128
grect1 100,100,400,200
redraw 1 : loop
es_timer t_n,0
dialog t_n - t_b
end
今回は変数が不要なgrect1を使用してみることとします。
osakanaさん、GENKIさん、ありがとうございました。
P.S boxfaですが、boxf風に書けるようにするとこうなりますね。
#module
#deffunc boxfb int ax, int ay, int bx, int by
pdx = ax, bx+ax, bx+ax, ax
pdy = ay, ay, by+ay, by+ay
gsquare -1,pdx, pdy
return
#global

| |
|
2007/2/4(Sun) 20:45:47|NO.5427
>boxf風に書けるようにするとこうなりますね。
すいません、あれは私の方が間違っていて、GENKIさんのがあってます。
のでGENKIさんの方を使った方がいいです。失礼しました。
|
|
2007/2/5(Mon) 19:28:57|NO.5444
なるほど。了解しました。
それではboxfa(を自分なりに改良したboxfb)の方を利用させていただくこととします。
どうもご親切に、ありがとうございました。
|
|