Skip to content

Instantly share code, notes, and snippets.

@manse
Last active August 29, 2015 14:26
Show Gist options
  • Save manse/b14b6fc2e9ccd4d5bc8b to your computer and use it in GitHub Desktop.
Save manse/b14b6fc2e9ccd4d5bc8b to your computer and use it in GitHub Desktop.
(function() {
// ゲーム本体のインスタンス
var runner = Runner.instance_;
// ゲームの更新処理をフック
var _update = runner.update;
runner.update = function() {
_update.call(this);
watch();
};
// 一番近い障害物を取得
function getNearestObstacle() {
var tRexX = runner.tRex.xPos;
var obstacles = runner.horizon.obstacles;
var nearestX = Runner.defaultDimensions.WIDTH;
var result = null;
for (var i = 0, ii = obstacles.length; i < ii; i++) {
var x = obstacles[i].xPos;
var y = obstacles[i].yPos;
if (y != 50 && tRexX < x && x < nearestX) {
nearestX = x;
result = obstacles[i];
}
}
return result;
}
// ジャンプ軌跡が描く放物面をはみ出さない障害物の最大X座標を計算
function getObstacleMaxXInParabola(d, e) {
var dd = d * d;
var a = -360 / dd;
var b = 360 * (d + 100) / dd;
var c = -18000 * (d + 50) / dd;
return (-b - Math.sqrt(b * b - 4 * a * (c - e))) / (2 * a);
}
// ジャンプするかどうか判断
function isNeedJump() {
var obstacle = getNearestObstacle();
if (!obstacle) return false;
var obstacleHeight = obstacle.collisionBoxes[1].height + 110 - obstacle.yPos;
var parabolaWidth = 26 * runner.currentSpeed;
return obstacle.xPos < getObstacleMaxXInParabola(parabolaWidth, obstacleHeight) - obstacle.width;
}
// ジャンプ
function jump() {
runner.onKeyDown({
keyCode: 38
})
}
// 自動ジャンプ処理
function watch() {
isNeedJump() && jump();
}
jump();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment