【发布时间】:2020-01-03 23:53:12
【问题描述】:
对于一个练习,我应该创建一本由箭头键控制的书,并且在没有按键时平稳停止。但是,每次单击箭头键时,动画播放的速度都会越来越快。
我将下面的代码粘贴,抱歉没有将其限制在必要的部分,但我自己并没有完全理解。
var WIDTH = window.innerWidth;
var HEIGHT = window.innerHeight;
document.addEventListener('keydown', onDocumentKeyDown, false);
document.addEventListener('keyup', onDocumentKeyUp, false);
function onDocumentKeyDown(event) {
event = event || window.event;
var keycode = event.keyCode;
switch (keycode) {
case 38:
tb -= 5;
break;
case 40:
tb += 5;
break;
case 37:
t -= 5;
break;
case 39:
t += 5;
break;
}
}
function onDocumentKeyUp(event) {
event = event || window.event;
var keycode = event.keyCode;
requestAnimationFrame(render);
cube.position.x += 0 * Math.sin(t);
renderer.render(scene, camera);
switch (keycode) {
case 37:
console.log("left up");
break;
case 38:
console.log("up up");
break;
case 39:
console.log("right up");
break;
case 40:
console.log("down up");
break;
}
}
var renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(WIDTH, HEIGHT);
renderer.setClearColor(0xDDDDDD, 1);
document.body.appendChild(renderer.domElement);
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(50, WIDTH / HEIGHT, 0.1, 10000);
camera.position.z = 50;
scene.add(camera);
var boxGeometry = new THREE.BoxGeometry(10, 10, 10);
var phongMaterial = new THREE.MeshPhongMaterial({
color: 0xFF0000
});
var cube = new THREE.Mesh(boxGeometry, phongMaterial);
cube.position.x = -25;
cube.rotation.set(0.4, 0.2, 1);
scene.add(cube);
var light = new THREE.PointLight(0xFFFFFF);
light.position.set(-10, 15, 50);
scene.add(light);
var t = 0;
var tb = 0;
function render() {
if (t > 0) t *= 0.98;
if (t < 0) t *= 0.98;
if (t > 0 && t < 0.5) t = 0;
if (t < 0 && t > (-0.5)) t = 0;
if (tb > 0) tb *= 0.98;
if (tb < 0) tb *= 0.98;
if (tb > 0 && tb < 0.5) tb = 0;
if (tb < 0 && tb > (-0.5)) tb = 0;
requestAnimationFrame(render);
if (t != 0) console.log(t);
cube.position.x += 0.1 * t;
cube.position.z += 0.1 * tb;
renderer.render(scene, camera);
}
render();
body {
margin: 0;
padding: 0;
font-size: 0;
}
canvas {
width: 100%;
height: 100%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
【问题讨论】:
标签: javascript html arrays three.js