HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0203
RuthlessDragon半透明矩形の手段5解決


RuthlessDragon

リンク

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
利点:仮想画面不要
難点:表示場所が分かりにくい?


より良い手段はあるでしょうか?どうぞよろしくお願いします。



この記事に返信する


osakana

リンク

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
-------------



GENKI

リンク

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



RuthlessDragon

リンク

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



osakana

リンク

2007/2/4(Sun) 20:45:47|NO.5427

>boxf風に書けるようにするとこうなりますね。

すいません、あれは私の方が間違っていて、GENKIさんのがあってます。
のでGENKIさんの方を使った方がいいです。失礼しました。



RuthlessDragon

リンク

2007/2/5(Mon) 19:28:57|NO.5444

なるほど。了解しました。
それではboxfa(を自分なりに改良したboxfb)の方を利用させていただくこととします。
どうもご親切に、ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.