トップページへ
 背景エフェクト
・暗闇   | 利用規約 | 使い方 | 操作方法 |
■説明
背景を暗闇にし、自機の周囲しか見えないエフェクトをかけます。
プレイヤーに考えて操作させる場面、慎重に操作させる場面に
向いた処理です。
プログラムでは暗闇処理をしている部屋としていない部屋を
作っており、処理を行っている部屋が迷路になっています。

■参考
自機の移動 - ハシゴ動作
自機の移動 - スクロール


■解説
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();
      }
   }

   ◆スクロール中の黒描画説明(例:右方向スクロール)








トップページへ