[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。
マップエディタのresizeの機能拡張
2018/08/05まで3日もの間、頭を悩ませていた機能を説明する。
その概要は、マップエディタの【resize】の機能の拡張だ。
Elonaにあるマップエディタの機能に【resize】のボタンがある。
右に2つテキストボックスが並んでいて、左に幅(x)、右に高さ(y)の数値が入っている項目がある。
この数値を変更して【resize】を押すとマップのサイズが変更される。
画面。拡張した機能の関係で上に1つテキストボックスが追加されている。
拡大すると右下に広がる。既存のマップはそのまま。縮小する時は右や下から消える。
アイテム情報は保持されているので、今回は見えなくなるアイテム・キャラ・オブジェクトのデータも
削除する処理を追加した。
拡張する機能の内容は、方向にくっつけて拡大するというもの。
右上・右下・左下を指定して拡大すれば、既存のマップデータをそこに移動して拡大する。
拡大後から見れば左下指定なら右と上が拡大される。
縮小時も似たもので、左下指定なら右と上が端から消えて縮小される。
マップから見えなくなったアイテムなどのデータは消去されてちゃんと配列データが詰められる。
こんな感じの機能になる。
既存の拡大機能だと左上にくっついたままなので、左や上に建物を増やしたい時に
新しく作り直すのが面倒だった事と、何時か他のマップファイルをくっつける機能とかが欲しくなったら
使えるようにというのもある。
パルミアの左側を拡張したり雪国のマップ編集時に欲しくなったのが切欠で拡張の開発を始めた。
アイデア自体は去年ぐらいにあって、開発しようとしたけど難しくて断念したもの。
マップエディタの機能を編集している内に手を出したが、間違いだったかと悩んだものだ。
(編集した機能はまた別の機会があれば載せる)
開発自体が何回でうまく作れなすぎて開発日記のようなものを作るほど混乱していた程で
途中でパスワード更新などをしていたがちゃんと出来ていたかが思い出せない。
前のパスワードを間違えて記録を残していたのでログインする為に当時のデータを攫いだした。
躓いた所のメモ
マップ外のアイテムを消す機能の挙動が怪しく【resize】すると全てのアイテムが消える!
→defineと変数で似た変数を誤って使っていた。maxCmapDataとcmapDataMax。
そっくりさんで絶対間違えそうだけど大丈夫だと他の機能を開発していた時に思っていたけど
大丈夫じゃなかった。1日ぐらいこれで消費した。
マップを拡大すると上に拡大した差だけ草原ができる!
→変更前のマップの配列を退避してから、マップの配列を変更後のサイズに変えて戻す処理がある。
この退避する処理で上限のチェックが漏れていた。
エラーがあった頃:if
(x>=0)&(y>=0)&(x<mWidth)&(y<mHeight){
元のマップサイズで判定しているだけだった。変更後のサイズの判定も必要だった。
直した後:if
(x>=0)&(y>=0)&(x<mWidth)&(y<mHeight)&(x<length(mapbk))&(y<length2(mapbk)){
簡単そうで普通に悩んで1日ぐらい試行錯誤した。
マップを縮小するとエラーが出た!
→変更後のサイズに変えて戻す所で範囲外の判定式がなかった。
と思わせておいて、試行錯誤している内に変更後のサイズに変えるdimの宣言部分をコメント化していた
というオチ。酷いが結構悩んだのも酷い。
LastUpdate:2018/08/05