// 概要 // 指定範囲のマップを"Panel"オブジェクトにコピーし画像を保存する。 // "マップ画像だけ"なので表示されているオブジェクトは"panel"には反映されない。 // (自機や敵機は反映されないよ) // // 書式 // panel = saveMap(fn,scx,scy,ecx,ecy); // // 入力 // fn 保存ファイル(ビットマップ形式)名称 省略時 保存しない // scx 保存範囲(X方向開始位置:チップ単位) 省略時 0(マップ全体の左端) // scy 保存範囲(Y方向開始位置:チップ単位) 省略時 0(マップ全体の上端) // ecx 保存範囲(X方向終了位置:チップ単位) 省略時 マップ全体の右端 // ecy 保存範囲(Y方向終了位置:チップ単位) 省略時 マップ全体の下端 // // 出力 // (戻値) 作成された"Panel"オブジェクト エラー時 "null"を返す。 // // 使用方法 // オブジェクトに組込んでも良いが、ゲーム実行時に使用しないなら // [メニュー]-[ウィンドウ]-[テスト実行]で、"テスト実行"ウィンドウを起動して // このテキストをコピペで貼付けた後に、 // // savemap("hoge.bmp"); // // を打込んで、[F9]で実行すればOK。 // // 応用 // でかいマップだと、画像サイズが洒落にならなくなるので、縮小の例です。 // ("テスト実行"ウィンドウで実行を想定) // // (このファイルのコピペ) // // scale=1/2; // 倍率:この例だと半分です // p1=saveMap(); // マップ全体をコピー(ここでは保存しない) // // 保存画像作成用"Panel"オブジェクト生成 // p2=new Panel(-trunc(p1.width*-scale),-trunc(p1.height*-scale)); // // 指定倍率の画像生成 // p2.copyRect(0,0,p2.width,p2.height,p1,0,0,p1.width,p1.height); // p2.save("fuga.bmp"); // ここで保存です。 function saveMap(fn,scx,scy,ecx,ecy) { var panel,sx,sy,ex,ey,sw,sh,px,py; if(scx) sx=scx; else sx=0; // デフォルト値処理 if(scy) sy=scy; else sy=0; if(ecx) ex=ecx; else ex=$Map.width-1; if(ecy) ey=ecy; else ey=$Map.height-1; if(sx>ex) sw=1; if(sy>ey) sw=2; // 保存範囲指チェック if(sx<0) sw=3; if(sy<0) se=4; if(ex>=$Map.width) sw=5; if(ey>=$Map.height) sw=6; if(sw) { // print("Error: "+sw); // デバッグ用エラー表示 return null; } sw=ex-sx+1; sh=ey-sy+1; // sw,sh: 保存画像サイズ チップ単位 // 保存画像作成ワーク用"panel"オブジェクト生成 panel=new Panel(sw*$Map.pwidth,sh*$Map.pheight); py=0.5; for(sh=sy; sh<=ey; sh++) { // "panel"にマップを描画 px=0.5; for(sw=sx; sw<=ex; sw++) { panel.drawSprite(px*$Map.pwidth,py*$Map.pheight,$Map.get(sw,sh)); px+=1; } py+=1; } if(fn) panel.save(fn); // 画像保存 return panel; }