Understanding Vertical Movement Method in "Eloquent Jav
Understanding Vertical Movement Method in "Eloquent JavaScript"
最近我一直在从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)
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- "Eloquent Javascript“;递归练习