碰撞試作!

by j91157j91157

HTML

<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

body {
  overflow: hidden
}

JavaScript

var renderer, camera, controls, scene, keyboard = new KeyboardState();
var Chariot, base;
var speed, angle, vel, clock;
var pos = new THREE.Vector3();
var bar = [], barRadius = [];
var camera3rd, width = window.innerWidth, height = window.innerHeight;

(function() {
  Math.clamp = function(val,min,max){
    return Math.min(Math.max(val,min),max);
}})();

init();
animate();

function isCrash(){
    var distX = Math.abs(A.position.x - Chariot.position.x-10);
    var distY = Math.abs(A.position.z - Chariot.position.z-20);

    if (distX > (10 + 20)) { return false; }
    if (distY > (20+ 20)) { return false; }

    if (distX <= (10)) { return true; } 
    if (distY <= (20)) { return true; }

    var dx=distX-10;
    var dy=distY-20;
    return (dx*dx+dy*dy<=(20*20));
}

function makeBar(){
	var barM = new THREE.MeshBasicMaterial({
  	color: 0x426ef4
  });
	
  barRadius[0] = 10;
	bar[0] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[0], barRadius[0], 100, 20), barM.clone());
  bar[0].position.set(30, 50, 90);
  barRadius[1] = 20;
	bar[1] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[1], barRadius[1], 50, 20), barM.clone());
  bar[1].position.set(-80, 25, 60);
  barRadius[2] = 15;
	bar[2] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[2], barRadius[2], 80, 20), barM.clone());
  bar[2].position.set(100, 40, 80);
  barRadius[3] = 18;
	bar[3] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[3], barRadius[3], 120, 20), barM.clone());
  bar[3].position.set(-160, 60, 20);
  barRadius[4] = 18;
	bar[4] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[4], barRadius[4], 75, 20), barM.clone());
  bar[4].position.set(-160, 37.5, -90);
  barRadius[5] = 25;
	bar[5] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[5], barRadius[5], 60, 20), barM.clone());
  bar[5].position.set(60, 30, -70);
  barRadius[6] = 17;
	bar[6] = new THREE.Mesh(new THREE.CylinderGeometry(barRadius[6], barRadius[6], 90, 20), barM.clone());
  bar[6].position.set(40, 45,...