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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0209
pig文字のグラデーション5解決


pig

リンク

2007/2/9(Fri) 12:04:46|NO.5534

タイトルの通り、例えば「あ」という文字があるとすると
「あ」の上の方は青っぽくて下の方は白っぽいのようなグ
ラデーション文字は作れるでしょうか?
できればゲームで扱える方法でお願いします。



この記事に返信する


こん

リンク

2007/2/9(Fri) 15:03:53|NO.5538

バッファに黒で文字を描いて、グラデーションの上にgcopy(黒を透過)で貼り付けるのが手っ取り早いです。
ただ、背景が変わったりする時には面倒かもしれません



KIMU

リンク

2007/2/9(Fri) 22:15:36|NO.5547

gmode 7のピクセルアルファブレンドコピーを使うのもいいかもしれない


//モジュール #module "grdmes" #define global TEMP_SCREENID 100 ;作業用スクリーンバッファID(指定されない時) #define rgb_bak(%1,%2,%3) rbak=ginfo(16):gbak=ginfo(17):bbak=ginfo(18) #define rgb_set(%1=rbak,%2=gbak,%3=bbak) color %1,%2,%3 /* gmes_set g_mes がパラメータ省略可能な命令*/ //「作業用のスクリーンにグラデーション設定($RRGGBB)」 //gmes_set グラデーション上の色, 下の色, 色が変化するライン数, フォント名前, フォントサイズ, フォントスタイル, 作業用スクリーンバッファID #define global gmes_set(%1=$ffffff,%2=0,%3=1,%4="",%5=18,%6=0,%7=TEMP_SCREENID) _gmes_set (%1),(%2),(%3),(%4),(%5),(%6),(%7) #deffunc _gmes_set int scol,int ecol,int lin,str fnam,int siz,int fstyle,int tmpid SELID=ginfo_sel rgb_bak TS_ID=tmpid sr=scol>>16 :sg=(scol>>8)&$ff :sb=scol&$ff er=ecol>>16 :eg=(ecol>>8)&$ff :eb=ecol&$ff if lin<1 {size=siz:_lin=1}else{size=siz/lin:_lin=lin} r=double(er-sr)/siz :g=double(eg-sg)/siz :b=double(eb-sb)/siz if r<0.0 {_sr=er:_er=sr:dr=255}else{_sr=sr:_er=er:dr=0} if g<0.0 {_sg=eg:_eg=sg:dg=255}else{_sg=sg:_eg=eg:dg=0} if b<0.0 {_sb=eb:_eb=sb:db=255}else{_sb=sb:_eb=eb:db=0} buffer TS_ID,640,480,0 ;ここをscreen に変えれば実際の動作が分かりやすい if fnam!"" {font fnam,siz,fstyle} color 0,0,0 :boxf repeat 240/siz cnty=cnt*siz repeat size cntcol=cnt*_lin color limit(r*cntcol+dr,_sr,_er),limit(g*cntcol+dg,_sg,_eg),limit(b*cntcol+db,_sb,_eb) boxf 0,cnty+cntcol,320,cnty+cntcol+_lin loop loop gsel SELID rgb_set return //「現在アクテブなスクリーンにグラデーション文字を描画」 //g_mes 文字列, x座標, y座標, 作業用ID #define global g_mes(%1="",%2=$0fffffff,%3=$0fffffff,%4=TS_ID@grdmes) _g_mes (%1),(%2),(%3),(%4) #deffunc _g_mes str mesbf,int px,int py,int tmpid rgb_bak SELID=ginfo_sel if px=$0fffffff {cpx=ginfo(22)}else{cpx=px} ;$0fffffffの時は pos指定が無いので現在のカレントポジションを使用 if py=$0fffffff {cpy=ginfo(23)}else{cpy=py} gsel tmpid color 0,0,0 :boxf 320,0,640,240 :boxf 0,240,320,240 color 255,255,255 :pos 320,0 :mes mesbf ;加工前の描画 addpx=ginfo(22)-320 :addpy=ginfo(23) gmode 7,320,240 :pos 0,240 :gcopy tmpid,0,0,320,240 ;加工後の描画 gsel SELID gmode 2,320,240 :pos cpx,cpy :gcopy tmpid,0,240,320,240 ;加工した文字列を表示 pos cpx+addpx,cpy+addpy rgb_set return #global //モジュールここまで screen 0,640,480,0 color 20,80,80:boxf:color 255,255,255 a="あいうえお\nかきくけこ" FONTNAME="MS 明朝" FONTSIZE=32 FONTSTYLE=1+2+16 //省略時 グラデは上$ff_ff_ff下0で一ラインづつ、フォントは変更しません。 作業用スクリーンIDは100 gmes_set $0000ff,$ffffff,2,FONTNAME,FONTSIZE,FONTSTYLE,100 //省略時 現在のカレントポジションを使用、最後にgmes_setで使用した作業用スクリーンを使用 g_mes a,150,150,100 gmes_set ,,,,,,101 g_mes a g_mes a,,,100 mes a gmes_set $ffffff,$0000ff,6,FONTNAME,48,FONTSTYLE font FONTNAME,48,FONTSTYLE pos 49,49:color 200,200,200 mes a pos 52,52:color mes a g_mes a,50,50



KIMU

リンク

2007/2/9(Fri) 22:23:19|NO.5548

主要部分を抜き出すとこな感じ
このまま使うとコピーに無駄が出るから
その変は色々考えるしかないかな・・・


screen 1,640,480,0 :color 0,0,0 :boxf repeat 240/18 cnty=cnt*18 repeat 18 color limit(cnt*255/18,0,255),limit(cnt*255/18,0,255),255 line 0,cnty+cnt,320,cnty+cnt loop loop a="あいうえお\nかきくけこ\nABCDEFGabcdefg\nABCDEFGabcdefg" color 0,0,0 :boxf 320,0,640,240 :boxf 0,240,320,240 color 255,255,255 :pos 320,0 :mes a gmode 7,320,240 :pos 0,240 :gcopy 1,0,0,320,240 screen 0,640,480,0 gmode 2,320,240 :pos 0,0 :gcopy 1,0,240,320,240



KIMU

リンク

2007/2/10(Sat) 00:26:58|NO.5551

NO.5547ので間違いが有りました。
> if r<0.0 {_sr=er:_er=sr:dr=255}else{_sr=sr:_er=er:dr=0}
> if g<0.0 {_sg=eg:_eg=sg:dg=255}else{_sg=sg:_eg=eg:dg=0}
> if b<0.0 {_sb=eb:_eb=sb:db=255}else{_sb=sb:_eb=eb:db=0}
の部分を


if r<0.0 {_sr=er:_er=sr:dr=_er}else{_sr=sr:_er=er:dr=_sr} if g<0.0 {_sg=eg:_eg=sg:dg=_eg}else{_sg=sg:_eg=eg:dg=_sg} if b<0.0 {_sb=eb:_eb=sb:db=_eb}else{_sb=sb:_eb=eb:db=_sb}
に、してください。
(グラデーションの各色0か255からしか旨くいかなくなってた)



pig

リンク

2007/2/10(Sat) 02:32:17|NO.5556

こんさん、KIMUさん、どうもありがとうございます。
モジュールまで作ってくれてどうもありがとうございます。
スクリいろいろといじって勉強になりました。



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