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

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


<< 重ならないように円を配置ver2 | main | 一日ゲームNo.14「KnightJumper」 >>



壁の透過

壁の向こう側にいるキャラクターがいる場合、キャラと壁が重なる部分を半透明で表示するプログラムです

 

 

;壁の透過
#enum d_main=0
#enum d_wallwd
#enum d_maskchip
#enum d_chip
#enum d_bb0
#enum d_bb1
#enum d_maskwd
#include "gdi32.as"
#const SRCINVERT $00660046
csz=64
;チップ画像
buffer d_chip,csz*3,csz*2:celdiv d_chip,csz,csz
color:boxf:x=0:y=0
color 255:circle x,y,x+csz-1,y+csz-1:y+csz    ;キャラ
color ,,255:boxf x,y,x+csz-1,y+csz-1:y+csz    ;壁
;チップの黒白画像を作成
x1=csz:x2=csz*2
ty=0
repeat 2
    repeat csz:j=cnt
        repeat csz:i=cnt
            pget i,ty+j
            cl=ginfo(16)+ginfo(17)+ginfo(18)
            if cl>0{
                color 1
                pset x1+i,ty+j
                color 255,255,255
                pset x2+i,ty+j
            }
        loop
    loop
    ty+csz
loop
;マップ作成
mc=11:mr=8
gw=mc*csz:gh=mr*csz
dim mapdt,mc,mr
repeat 24
    x=rnd(mc):y=rnd(mr)
    mapdt(x,y)=1
loop
buffer d_bb0,gw,gh    ;XOR用1
hdc0=hdc
buffer d_bb1,gw,gh    ;XOR用2
hdc1=hdc
buffer d_wallwd,gw*2,gh    ;壁表示用
buffer d_maskwd,gw,gh    ;重複範囲用
;処理開始
screen d_main,gw,gh
repeat
    mux=mousex:muy=mousey
    gsel d_bb0:color 255,255,255:boxf
    gsel d_bb1:color 255,255,255:boxf
    gsel d_wallwd:color:boxf
    gsel d_maskwd:color 255,255,255:boxf
    ;障害物の画像とマスク画像を描写
    gsel d_wallwd
    gmode 2
    gsel d_bb1
    gmode 2
    repeat mr:j=cnt
        repeat mc:i=cnt
            if mapdt(i,j){
                gsel d_bb1
                x=csz*i:y=csz*j
                pos x,y:celput d_chip,1*3+1
                gsel d_wallwd
                pos x,y:celput d_chip,1*3
                pos x+gw,y:celput d_chip,1*3+2
            }
        loop
    loop
    ;XORコピーを用いて重なる範囲を取得する
    BitBlt hdc0,0,0,gw,gh,hdc1,0,0,$00660046
    gsel d_bb1
    pos mux,muy:celput d_chip,0*3+2
    BitBlt hdc0,0,0,gw,gh,hdc1,0,0,$00660046
    ;重複範囲を半透明にする
    gsel d_maskwd:color 128,128,128:boxf
    gmode 6,,,255:gcopy d_bb0,,,gw,gh
    ;壁表示用バッファに作成した重複範囲を重ねる
    gsel d_wallwd
    pos gw,0:gcopy d_maskwd,,,gw,gh
    ;メイン画像に表示
    gsel 0
    gmode 2
    color 255,255,255:boxf
    x=mux:y=muy
    pos x,y:celput d_chip,0*3
    gmode 7,,,125
    pos 0,0:gcopy d_wallwd,,,gw,gh
    redraw:await:redraw 0
loop

0
    posted by higashijugem 08:16comments(0)|-|


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