Map2 - hoge1e3/Tonyu2 GitHub Wiki

api

Map2クラス

Mapクラスから、次の機能が拡張されています。

  • レイヤーをbase,on だけでなく3層以上作成できます
  • row, colが指定されていない場合、自動的にマップが拡張されます。
  • chipWidth, chipHeightが指定されていない場合、最初に置いたマップチップの大きさで自動的に設定されます
  • 壁の判定や、チップの種類による接触判定が簡単に行えるようになります
  • マップチップからActorオブジェクトを生成することができます。例えば、マップチップ上に敵の絵のパターンを書き込んでおいて、その敵の動作を表すActorを生成する、という使い方ができます。
  • マップを拡大縮小回転させることができ、getAt, setAtが拡大縮小回転した状態でも有効になります
  • マップファイルのフォーマットがver2になりました。
    • マップファイル作成後、キャラクタパターンの順序や個数が変わっても正しく読み込むことができます
    • これまでのマップファイル(ver1)も読込可能です。保存した場合はver2に変換されます。
    • 存在しないパターン番号を読み込もうとした場合はエラーになります。
      • 例えば、マップ保存時に$pat_houseという名前の画像があったが、$pat_houseを画像リストから削除してマップを読み込んだ時、あるいは、保存時には$pat_house+50 というパターン番号があったが、元画像を更新してパターン数が減ってしまい、($pat_house自身は存在するが)$pat_house+50が存在しなくなった時など。

座標系について

  • チップ座標:左上のチップを(0,0)、その右隣のチップを(1,0)のように指定する座標系。本ページでは(cx,cy)と記載
  • ワールド座標:他のオブジェクトを基準にした座標系。ピクセル単位。本ページでは(x,y)と記載
  • 例えば、あるActorオブジェクトが(100,200)の位置にいて、マップ上の左上のチップに重なっている場合、ワールド座標(100,200)はチップ座標(0,0)に置き換えられます。チップ座標をワールド座標に置き換える場合、チップの中央の点を基準に置き換えます。したがって先ほどの例では、チップ座標(0,0)がワールド座標(100,200)に置き換えられるとは限りません(オブジェクトがチップの中央の点にぴったり重なっている場合に限る)。

従来のMapと同じメソッド

  • new (param) //(コンストラクタ)
  • load(file)
  • save(file)
  • set(cx,cy,p)
  • setAt(x,y,p)
  • setOn(cx,cy,onP)
  • setOnAt(x,y,p)
  • get(cx,cy)
  • getAt(x,y)
  • getOn(cx,cy)
  • getOnAt(x,y)
  • scrollTo(x,y)

新しく追加されたメソッド・プロパティ

  • expand
    • マップを自動的に拡張するかどうかをオブジェクトまたは文字列で設定します。
    • オブジェクトには次の属性を設定できます
      • row 行(縦方向)を拡張するかどうかをtrue / falseで指定します。Map2を作成時にrowを指定しなかった場合はtrueが設定されています
      • col 列(横方向)を拡張するかどうかをtrue / falseで指定します。Map2を作成時にcolを指定しなかった場合はtrueが設定されています
      • all 縦と横をともに拡張するかどうかを指定します
    • 文字列の場合、row, col, all をカンマ区切りで指定し、指定したものがtrueになります
  • addChipLayer(name)
    • 新しいレイヤーを名前を指定して作成します。Map2の作成時には"base""on"が自動的に追加されています。
  • setPivot(px,py)
    • 拡大縮小回転をするときの中心点を設定します。マップの左上が(px,py)=(0,0)で、ピクセル単位です。マップ自体の座標(x,y)の基準点も(px,py)になります。
  • pack()
    • 一旦拡張したマップのうち、消去した(-1を書き込んだ)領域があれば縮めます(row,colが減る場合があります)
  • setWithLayerName(name, cx, cy , p)
    • nameで指定された名前のレイヤーの(cx,cy)にマップチップを書き込みます
  • getWithLayerName(name, cx, cy)
    • nameで指定された名前のレイヤーの(cx,cy)からマップチップのパターン番号を読み出します
  • setWallFilter(options)
    • 「壁」になるチップの種類を指定します。
    • optionsには次のものを指定できます
      • {layer:[<レイヤー名>, <レイヤー名>...]} <レイヤー名>(文字列)で指定したすべてのレイヤーに配置されているもの(-1のもの以外)すべてを「壁」とみなします。
      • {wall:[<パターン番号>, <パターン番号>... ]} 全レイヤーの指定した<パターン番号>(数値)をすべて「壁」とみなします。
      • {path:[<パターン番号>, <パターン番号>... ]} 全レイヤーの指定した<パターン番号>以外をすべて「壁」とみなします。
      • [<レイヤー名>, <レイヤー名>...]や[<パターン番号>, <パターン番号>... ]はそれぞれ要素が1つしかない場合、配列ではなく文字列や数値を直接指定できます。
      • layer と wall 、 layer と path を組み合わせて「指定したレイヤーにある、指定したパターン(以外)を「壁」とみなす」という設定もできます。
      • 数値: {wall: <数値>}と等価。
      • 配列: {wall: <配列>}と等価。
      • 関数: MapChipオブジェクトを受け取り、true/falseを返す関数を指定します
  • isWall(cx,cy)
    • 指定した位置(チップの座標)にあるチップが「壁」かどうかを返します。
  • isWallAt(x,y)
    • 指定した位置(ピクセル単位)にあるチップが「壁」かどうかを返します。
  • crashTo(actor)
    • 指定したactorがこのマップの「壁」にぶつかっていれば、壁と判定されたMapChipオブジェクトを返します。MapChipオブジェクトのlayersに当たった「壁」のレイヤーが格納されます
  • crashTo(actor, chipFilter)
    • 指定したactorがぶつかっているチップがchipFilterで指定された条件を満たせば、そのチップのMapChipオブジェクトを返します。
    • chipFilterは、MapChipオブジェクトを受け取り、true/falseを返す関数です。次項のchipFilterで生成できます。あるいは,chipFilterに渡す引数を直接指定してもかまいません.
  • chipFilter(options)
  • range(options)
    • optionsで指定した領域内にあるMapChipを配列で返します。
    • options がActorの場合、当たり判定(options.getCrashShapeを使用)の図形と一部または全部か重なっているマップチップをすべて返します。ただしoptions.layerがこのMap2のlayerと同じものを指定してください。
    • options がActor以外のオブジェクトの場合、属性には次のものを指定できます
      • left(またはxmin): 左上のx座標
      • top(またはymin): 左上のy座標
      • right(またはxmax): 右下のx座標
      • bottom(またはymax): 右下のy座標
      • width: 指定すると、right=left+width-1になります。rightは省略してください。
      • height: 指定すると、bottom=top-height-1になります。bottomは省略してください。
      • world: true相当の値を指定すると上記の座標を「ワールド座標」とみなします。それ以外は「チップ座標」とみなします。
  • worldToChip(o)
    • ワールド座標(o.x, o.y)をチップ座標に変換します
  • chipToWorld(o)
    • チップ座標(o.x, o.y)をワールド座標に変換します。
  • chipToWorld(cx,cy)
    • チップ座標(cx, cy)をワールド座標に変換します。
  • allLayerNames
    • すべてのレイヤー名を文字列の配列で返します。
  • chip(cx,cy,layers)
    • チップ座標(cx,cy)にあるMapChipオブジェクトを取得します。layers(レイヤー名またはその配列)を指定した場合、指定したレイヤーのみが操作対象になります
  • chipAt(x,y,layers)
    • ワールド座標(x,y)にあるMapChipオブジェクトを取得します。layers(レイヤー名またはその配列)を指定した場合、指定したレイヤーのみが操作対象になります
  • has(cx,cy,p)
    • チップ座標(cx,cy)で指定した位置のいずれかのレイヤーにパターン番号pがあればその位置のMapChipオブジェクトを返し、そのオブジェクトのlayersプロパティにどのレイヤーにpがあったかを返します。パターン番号pがない場合はnullを返します。(どのレイヤーか調べなくてよい場合、if(has(x,y,p))のように判定できます)
  • hasAt(x,y,p)
    • ワールド座標(x,y)で指定した位置のいずれかのレイヤーにパターン番号pがあればその位置のMapChipオブジェクトを返し、そのオブジェクトのlayersプロパティにどのレイヤーにpがあったかを返します。パターン番号pがない場合はnullを返します。
  • chipToActor(options)
    • マップチップからActorオブジェクトを生成します。
    • 生成するオブジェクトには、パラメータとして{x,y,p}が渡されます。(x,y)はチップのワールド座標、pはパターン番号です
    • 生成したチップには-1 が書き込まれ、マップ上からは消去されます
    • optionsには次のものを指定できます
      • p: Actorを生成するパターン番号。パターン番号がpであるすべてのチップからActorが生成されます。
      • class: 生成するActorのクラス
      • params: オブジェクトに渡すパラメータ。{x,y,p}以外の値を渡したい場合に用います。paramsには{x,y,p}を含めないでください。
⚠️ **GitHub.com Fallback** ⚠️