お世話になっております。
画面座標XYからマップ座標XYを割り出す方法についての質問です。
調べたところ(恐らく)実現可能なようなのですが、
具体的な計算式や変数の組み立て方がわからず四苦八苦しております…。
どなたかご存知の方いらっしゃいましたらご助力頂けると幸いです。
よろしくお願い致しますm(_ _)m
画面座標からマップ座標を割り出す方法
Re: 画面座標からマップ座標を割り出す方法
青林檎さん
こんにちは! 面白そうな質問内容でしたので、考えてみました。
イベントで変数に代入できるマップ座標と画面座標は下記の様になっていました。
this._realX と this.x および this._realY と this.y は基本的に同一と考えると、
下記の様に変換できると考えます。検証の方お願い出来ますでしょうか?
※キャラクターの場合のジャンプの高さと6px上にシフトさせている点は無視しております。
・マップ座標XYから変換して画面座標XYを求める場合
・画面座標XYから変換してマップ座標XYを求める場合
ループしているマップを考慮する場合、マップ座標XYに変換するためにマップ座標XYを使用する点が改善点ですが、
ループしていないマップの場合は下記で求められると考えられます。
以上です! 結果報告お待ちしております!
こんにちは! 面白そうな質問内容でしたので、考えてみました。
イベントで変数に代入できるマップ座標と画面座標は下記の様になっていました。
コード: 全て選択
case 5: // Character
var character = this.character(param1);
if (character) {
switch (param2) {
case 0: // Map X
return character.x;
case 1: // Map Y
return character.y;
case 2: // Direction
return character.direction();
case 3: // Screen X
return character.screenX();
case 4: // Screen Y
return character.screenY();
}
}
break;
this._realX と this.x および this._realY と this.y は基本的に同一と考えると、
下記の様に変換できると考えます。検証の方お願い出来ますでしょうか?
※キャラクターの場合のジャンプの高さと6px上にシフトさせている点は無視しております。
・マップ座標XYから変換して画面座標XYを求める場合
コード: 全て選択
var MapX = マップ座標X;
var MapY = マップ座標Y;
var ScreenX = Math.round($gameMap.adjustX(MapX) * $gameMap.tileWidth() + $gameMap.tileWidth() / 2);
var ScreenY = Math.round($gameMap.adjustY(MapY) * $gameMap.tileHeight() + $gameMap.tileHeight());
・画面座標XYから変換してマップ座標XYを求める場合
コード: 全て選択
var real_MapX = マップ座標X;
var real_MapY = マップ座標Y;
var ScreenX = 画面座標X;
var ScreenY = 画面座標Y;
var isLoopMapX = ($gameMap.isLoopHorizontal() && real_MapX < $gameMap.displayX() - ($gameMap.width() - $gameMap.screenTileX()) / 2)? $dataMap.width : 0;
var isLoopMapY = ($gameMap.isLoopVertical() && real_MapY < $gameMap.displayY() - ($gameMap.height() - $gameMap.screenTileY()) / 2)? $dataMap.height : 0;
var MapX = Math.round((ScreenX - $gameMap.tileWidth()/2)/$gameMap.tileWidth()+$gameMap.displayX() - isLoopMapX)
var MapY = Math.round((ScreenY - $gameMap.tileHeight())/$gameMap.tileHeight()+$gameMap.displayY() - isLoopMapY)
ループしているマップを考慮する場合、マップ座標XYに変換するためにマップ座標XYを使用する点が改善点ですが、
ループしていないマップの場合は下記で求められると考えられます。
コード: 全て選択
var ScreenX = 画面座標X;
var ScreenY = 画面座標Y;
var MapX = Math.round((ScreenX - $gameMap.tileWidth()/2)/$gameMap.tileWidth()+$gameMap.displayX())
var MapY = Math.round((ScreenY - $gameMap.tileHeight())/$gameMap.tileHeight()+$gameMap.displayY())
以上です! 結果報告お待ちしております!
________________________________________
「渡り鳥の楽園」
飯尾隼人
HP: http://wataridori-rakuen.jp/Elves/
twitter: https://twitter.com/wataridori_raku
Ci-en: https://ci-en.jp/creator/2449
________________________________________
「渡り鳥の楽園」
飯尾隼人
HP: http://wataridori-rakuen.jp/Elves/
twitter: https://twitter.com/wataridori_raku
Ci-en: https://ci-en.jp/creator/2449
________________________________________
Re: 画面座標からマップ座標を割り出す方法
返信が遅れてしまい申し訳ございません。
画面座標からツクールMVのタイルの48pxを除算することで、
擬似的にその座標に近いマップ座標XYを割り出すという方法で自己解決致しました。
素早い対応、ご回答ありがとうございました。m(_ _)m
画面座標からツクールMVのタイルの48pxを除算することで、
擬似的にその座標に近いマップ座標XYを割り出すという方法で自己解決致しました。
素早い対応、ご回答ありがとうございました。m(_ _)m