1.具体的処理(黒塗りつぶしと丸穴開け)
function darkness(x1,y1,x2,y2){
$panel.clear();
$panel.fillRect(x1,y1,x2,y2,$clBlack,5);
$panel.drawSprite(x-$viewX,y-$viewY,$pat_area+0,3);
}
一旦$panel.fillRectで背景を全部塗りつぶした後、丸形状の画像を自機の上に重ねて
描きます。丸画像はcolor(0,0,0):全黒でかかれており、パネルの一部だけが消去
されるので、自機の周囲だけ穴が開いて見えるようになります。
2.暗闇処理をかける条件
自機が特定の部屋に入ったときにのみ、処理を行うようにします。
if (mapX==$dark_switch.mapX && mapY==$dark_switch.mapY)
darkness(0,0,$screenWidth,$screenHeight);
シークレットオブジェクト(名前:dark_switch)が作ってあり、mapX,mapYには、
オブジェクトが配置されている部屋の位置が入っています。自機のmapX,mapY
(自機がいる部屋の位置)とシークレットオブジェクトのmapX,mapYが一致したときにだけ
処理を行うようにしています。
3.スクロール時の処理
画面スクロール時に何も処理をしないと、暗闇の処理をする部屋の全体が
見えてしまうので、スクロールに追従して黒描画を行います。
(暗闇処理を行っている部屋から出た場合も、同様の処理を行います)
if($Mychar.x>$viewX+$screenWidth){ //右へ出た場合
mapX++; offset=$viewX; init_p=$viewX;
while(init_p+$screenWidth>offset){
offset+=8;dark_offset+=8;
$map.scrollto(offset,$viewY);
if (mapX ==$dark_switch.mapX && mapY==$dark_switch.mapY)
darkness($screenWidth-dark_offset,0,$screenWidth,$screenHeight);
if (mapX-1==$dark_switch.mapX && mapY==$dark_switch.mapY)
darkness(0,0,$screenWidth-dark_offset,$screenHeight);
update();
}
}
◆スクロール中の黒描画説明(例:右方向スクロール)

|
|
|
|