最近,我一直在研究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
,因此我希望程序会出现错误,如果还有其他情况发生,有人可以向我解释吗?另外,我在这里不知道如何实现重力(为什么
step * gravity
表示初始速度,然后又逐步将其乘以-动画是时间)?我希望我能正确地解释自己,非常感谢您的任何建议。
最佳答案
如果查看该章的其余代码,则会注意到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找到了完整的代码)
关于javascript - 了解“高级JavaScript”中的垂直移动方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26620519/