という場合に
コード: 全て選択
this.locate($gameMap.canvasToMapX(TouchInput.x),$gameMap.canvasToMapY(TouchInput.y))
上記の方法で行っているのですが、これを半歩対応(0.5刻み)で行いたいです。
スクリプトで計算できる方法はありますでしょうか?
※トリアコンタン様の半歩移動プラグインを使用し、this.locate()で0.5刻みで瞬間移動できる事は確認済みです。
コード: 全て選択
this.locate($gameMap.canvasToMapX(TouchInput.x),$gameMap.canvasToMapY(TouchInput.y))
コード: 全て選択
(() => {
'use strict';
function Game_Map_HalfLocateMixIn(gameMap) {
gameMap.canvasToMapXHalf = function (x) {
const tileWidth = this.tileWidth();
const originX = this._displayX * tileWidth;
const mapX = Math.floor(2 * (originX + x) / tileWidth);
return this.roundX(mapX)/2;
};
gameMap.canvasToMapYHalf = function (y) {
const tileHeight = this.tileHeight();
const originY = this._displayY * tileHeight;
const mapY = Math.floor(2 * (originY + y) / tileHeight);
return this.roundY(mapY) / 2;
};
}
Game_Map_HalfLocateMixIn(Game_Map.prototype);
})();
Plasma Dark さんが書きました:canvasToMapX, canvasToMapY の結果を0.5刻みで取得するようなメソッドを定義して、それを使うようにするのが手っ取り早そうです。コード: 全て選択
(() => {
'use strict';
function Game_Map_HalfLocateMixIn(gameMap) {
gameMap.canvasToMapXHalf = function (x) {
const tileWidth = this.tileWidth();
const originX = this._displayX * tileWidth;
const mapX = Math.floor(2 * (originX + x) / tileWidth);
return this.roundX(mapX)/2;
};
gameMap.canvasToMapYHalf = function (y) {
const tileHeight = this.tileHeight();
const originY = this._displayY * tileHeight;
const mapY = Math.floor(2 * (originY + y) / tileHeight);
return this.roundY(mapY) / 2;
};
}
Game_Map_HalfLocateMixIn(Game_Map.prototype);
})();
こんな感じのプラグインを書けば、 $gameMap.canvasToMapXHalf などとして利用できます。