3. 加速度(按键给玩家加速)
# 加速度(按键给玩家加速)
上节课给大家讲解过,当你按下W键的时候,玩家角色模型,会运动,松开W键,人会停下来。但是这个运动效果是突然运动和突然停止,没有一个加速或减速的过程,本节课以W键为例,设置玩家加速过程,也就是当你按下W键以后,人的速度从0慢慢提升上来。
const v = new THREE.Vector3(0, 0, 3);
function render() {
if (keyStates.W) {
// 在间隔deltaTime时间内,玩家角色位移变化计算(速度*时间)
const deltaPos = v.clone().multiplyScalar(deltaTime);
player.position.add(deltaPos);//更新玩家角色的位置
}
}
# 设置加速度
// 用三维向量表示玩家角色(人)运动漫游速度
const v = new THREE.Vector3(0, 0, 0);//初始速度设置为0
const a = 12;//加速度:调节按键加速快慢
// 渲染循环
const clock = new THREE.Clock();
function render() {
const deltaTime = clock.getDelta();
if (keyStates.W) {
//先假设W键对应运动方向为z
const front = new THREE.Vector3(0,0,1);
// W键按下时候,速度随着时间增加
v.add(front.multiplyScalar(a * deltaTime));
// 在间隔deltaTime时间内,玩家角色位移变化计算(速度*时间)
const deltaPos = v.clone().multiplyScalar(deltaTime);
player.position.add(deltaPos);//更新玩家角色的位置
}
renderer.render(scene, camera);
requestAnimationFrame(render);
}
render();
# 限制最高速度
执行上面代码,当你按下W键的时候,v会一直加速,这时候可以通过v.length()
计算速度v的值,当然速度小一个临界值的时候,才增加速度v的大小。
const vMax = 5;//限制玩家角色最大速度
...
if (v.length() < vMax) {//限制最高速度
// W键按下时候,速度随着时间增加
v.add(front.multiplyScalar(a * deltaTime));
}