開車
by FatHomebody
HTML
<div id="info">
hw1 開車<br/>
Home啟動引擎,上下鍵加減速,左右鍵控制方向,空白鍵煞車,z鍵切換視角<br/>
<button id="toggle" style="margin-top:10px;font-size:18px;">切換視角</button><br/>
車速: <span id='curCarPower'></span>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/84/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://jyunming-chen.github.io/tutsplus/js/KeyboardState.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
CSS
#info {
position: absolute;
top: 2%;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
var scene, renderer;
var curCamera, camera1, camera2; //camera1:上帝視角,camera2:第三人稱視角
var keyboard = new KeyboardState();
var clock;
var cameraStatus = true;
var myCar;
var carStatus = false;
var pos = new THREE.Vector3(); //位移
var vel = new THREE.Vector3(); //速度
var force = new THREE.Vector3(); //阻力
var power, angle;
//使速度永遠介於min跟max之間
(function() {
Math.clamp = function(val, min, max) {
return Math.min(Math.max(val, min), max);
}
})();
init();
animate();
//切換視角
$("#toggle").click(
function() {
cameraStatus = !cameraStatus;
}
);
function init() {
clock = new THREE.Clock();
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x888888);
document.body.appendChild(renderer.domElement);
scene = new THREE.Scene();
camera1 = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera1.position.set(0, 270, 200);
camera1.lookAt(new THREE.Vector3())
camera2 = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
//let controls = new THREE.OrbitControls(camera1, renderer.domElement);
//controls.enableKeys = false;
/*建立車子模型*********************************************/
let geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(30, 0, 0))
geometry.vertices.push(new THREE.Vector3(-5, 0, -10))
geometry.vertices.push(new THREE.Vector3(0, 10, 0))
geometry.vertices.push(new THREE.Vector3(-5, 0, 10))
geometry.faces.push(new THREE.Face3(0, 1, 2))
geometry.faces.push(new THREE.Face3(0, 2, 3))
geometry.faces.push(new THREE.Face3(1, 3, 2))
geometry.faces.push(new THREE.Face3(0, 3, 1))
geometry.computeBoundingSphere();
geometry.computeFaceNormals();
geometry.computeVertexNormals();
myCar = new THREE.Mesh(geometry, new THREE.MeshNormalMaterial())
scene.add(myCar);
myCar.position.set(-50, 0, 50)
myCar.rotation.y = Math.PI * 1 / 4;
...