runners

by KUO YOU-TING

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stats.js/r14/Stats.min.js"></script>

CSS

canvas {
		position: fixed;
		top: 0;
		left: 0;
	}

JavaScript

var clock = new THREE.Clock();
var scene, renderer, camera;
var runner1, runner2, runner3;

var Runner = function (boundary, zz, sign) {
 	// properties ...
    this.bound = boundary;
    this.zz = zz;
    this.sign = sign;
	var cubeGeometry = new THREE.BoxGeometry (10,10,10);
	var cubeMaterial = new THREE.MeshLambertMaterial ({color: 0x1ec876});
	this.mesh = new THREE.Mesh (cubeGeometry, cubeMaterial);
    scene.add (this.mesh);
    
    this.xx = 0;
};

//method
Runner.prototype.update = function () {
    if (Math.abs (this.xx) > this.bound) {
            this.sign *= -1;
        }
        this.xx += this.sign;
        this.mesh.position.set (this.xx, 0, this.zz);
};

init();
animate();

function init()
{
	var width = window.innerWidth;
	var height = window.innerHeight;
    
	renderer = new THREE.WebGLRenderer( {antialias:true} );

	renderer.setSize (width, height);
	document.body.appendChild (renderer.domElement);
	
	// STATS
	stats = new Stats();
	stats.domElement.style.position = 'absolute';
	stats.domElement.style.top = '0px';
	stats.domElement.style.zIndex = 100;
	document.body.appendChild( stats.domElement );	
    
	scene = new THREE.Scene();
    
    runner1 = new Runner (30, 0, 3);
    runner2 = new Runner (40, -50, 2);
    runner3 = new Runner (80, 50, 4);

	camera = new THREE.PerspectiveCamera (45, width/height, 0.1, 10000);
	camera.position.y = 160;
	camera.position.z = 400;
	camera.lookAt (new THREE.Vector3(0,0,0));

	var skyboxGeometry = new THREE.BoxGeometry (1000,1000,1000);
	var skyboxMaterial = new THREE.MeshBasicMaterial ({color: 0x1f1f1f, side:THREE.BackSide});
	var skybox = new THREE.Mesh (skyboxGeometry, skyboxMaterial);
	scene.add (skybox);

	var gridXZ = new THREE.GridHelper(100, 10);
	gridXZ.setColors( new THREE.Color(0xff0000), new THREE.Color(0xffffff) );
	scene.add(gridXZ);

	var pointLight = new THREE.PointLight (0xffffff);
	pointLight.position.set (0,300,200);
	scene.add (pointLight);
	
	window.addEventListener ('resize',...