| 
 | 
 
 
 
 
 |  | 
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)の方を利用させていただくこととします。
 どうもご親切に、ありがとうございました。
 
 | 
 
 
 |