ゲームを作りたい人のための ソースコード集

私がその日作った短めのソースを簡単な解説とともに載せていきます
ゲーム制作初心者にとって参考になるかもしれないソースが多いです


<< バッファオーバーフロー対策 | main | 計算式の分割 >>



アンチエイリアス付きの円

境界面が滑らかな円を描写します。

真円しか描けないなど実用性は低いですが、こういうやり方もあるということで。

 

#module
;中心座標X、中心座標Y、半径、描画モード(0=線,1=塗りつぶし)
#deffunc circle_anti int cx,int cy,int cr,int lnflg
    actid=ginfo(2)
    clr_r=ginfo(16)
    clr_g=ginfo(17)
    clr_b=ginfo(18)
    tmpid=ginfo(25)
    buffer tmpid,cr*2+1,cr*2+1
    color:boxf
    color clr_r,clr_g,clr_b
    if lnflg{
        line cr,cr,cr*cr,cr
    }else{
        pset cr*2,cr
    }
    repeat cos(deg2rad(45))*cr+((cr+1)¥2),1:y=cnt
        x=sqrt(cr*cr-y*y)
        d=(x-int(x))
        tclr_r=int(d*clr_r)
        tclr_g=int(d*clr_g)
        tclr_b=int(d*clr_b)
        color tclr_r,tclr_g,tclr_b
        pset cr+x+1,cr+y
        if lnflg{
            color clr_r,clr_g,clr_b
            line cr,cr+y,cr+x,cr+y
        }else{
            tclr_r=int((1.0-d)*clr_r)
            tclr_g=int((1.0-d)*clr_g)
            tclr_b=int((1.0-d)*clr_b)
            color tclr_r,tclr_g,tclr_b
            pset cr+x,cr+y
        }
    loop
    
    gmode 2,cr*2+1,cr*2+1
    pos cr,cr
    grotate tmpid,1,1,M_PI/2
    grotate tmpid,1,1,M_PI
    tmpid2=ginfo(25)
    buffer tmpid2,cr*2+1,cr*2+1
    gmode 2,cr*2+1,cr*2+1
    pos cr*2,0
    gzoom -(cr*2+1),cr*2+1,tmpid,0,0,cr*2+1,cr*2+1
    gsel tmpid
    pos 0,0
    gcopy tmpid2,0,0,cr*2+1,cr*2+1
    
    gsel actid
    pos cx-cr,cy-cr:gcopy tmpid,0,0,cr*2+1,cr*2+1
    return
#global

color:boxf
color 255,255,255
;通常の円
circle 200-100,240-100,200+100,240+100,1
;アンチエイリアス付きの円
circle_anti 460,240,100,1

0
    posted by higashijugem 20:05comments(0)|-|


    この記事に対するコメント