San_AnalogMove 衝突するキャラクターの判定を変更する知見の共有

shun

ユーザー
サンシロさんが作成したAnalogMoveプラグイン使っていますか?  いいですよね。

ただこちらのプラグイン、キャラクターはアナログで動くのですが、マップやイベントとの衝突は1マス単位での判定のままです。
せっかくアナログな動きが実現できているのだからせっかくなら衝突も1マス単位ではなくしたいですよね。

ということで現在こちらのプラグインについて調査中です。
キャラクター(イベント)との衝突を改変する方法が分かってきましたので自分用のメモを兼ねた情報共有のために記事を投稿します。

JavaScript:
// 衝突距離キャラクター判定
CharacterMover.prototype.isCollidingDistanceCharacter = function (character) {
    var chaPosVec = character.posVec();
    var relPosVec1 = chaPosVec.sub2(this._posVec);
    var relPosVec2 = chaPosVec.sub2(this.movPosVec());
    return (
        relPosVec1.cos(this._velVec) > Math.cos(Math.PI * 3.0 / 4.0) &&
        relPosVec2.len() < 1.0 - this.collideMargin()
    );
};
isCollidingDistanceCharacter というメソッドが定義されています。

次の一行の 1.0 という数値を
JavaScript:
relPosVec2.len() < 1.0 - this.collideMargin()
例えば次のように 2.0 に書き換えることでおおよそ半径2のあたり判定になります
JavaScript:
relPosVec2.len() < 2.0 - this.collideMargin()
当然小数点の設定も可能です。

例えばイベントごとに meta データの設定をすることで当たり判定のサイズを変更できるようにできるのではないかと考えています。
全てのキャラクターが1マスという前提に基づいていますので、他への影響があるかもしれません。

自分と、そして同じようにAnalogMoveを活用しようとしている人のために向けたちょっとした情報の共有でした。
 
トップ