最近我一直在研究Eloquent JavaScript的JavaScript;目前我在第15章称为“平台游戏”项目:平台游戏'。我一直在查看代码并抓住了所有内容,但是当作者解决沿垂直轴的移动时,我遇到了一种方法:
var gravity = 30;
var jumpSpeed = 17;
Player.prototype.moveY = function ( step, level, keys ) {
this.speed.y += step * gravity;
var motion = new Vector( 0, this.speed.y * step );
var newPos = this.pos.plus( motion );
var obstacle = level.obstacleAt( newPos, this.size );
if ( obstacle ) {
level.playerTouched( obstacle );
if ( keys.up && this.speed.y > 0 )
this.speed.y = -jumpSpeed;
else
this.speed.y = 0;
} else {
this.pos = newPos;
}
};
我不确定gravity
和this.speed.y
在这种情况下是如何运作的,我希望你能帮助我更好地理解它。
我的问题:
特别是,在第五行this.speed.y += step * gravity
上,speed.y
未在程序中的任何地方声明,因此我希望该程序应该出错,是否有人可以向我解释如果有&# 39;其他事情还在继续吗?
另外,我不知道重力是如何在这里实现的(为什么step * gravity
为初始速度然后再将它再乘以步骤 - 步骤是动画期间的时间?
我希望我能够正确地解释自己并非常感谢你的任何建议。
答案 0 :(得分:2)
如果您查看该章的其余代码,您会注意到this.speed
已初始化为:
this.speed = new Vector(0, 0);
Vector在代码中定义为:
function Vector(x, y) {
this.x = x; this.y = y;
}
因此,第一次运行this.speed.y += step * gravity
时,this.speed.y
已初始化为0。
(我在http://eloquentjavascript.net/code/chapter/15_game.js找到了完整的代码)