gameProgramming_hw5

by chaiche

HTML

<div id="info">
hw5<br>
左下角為目標物周圍圖<br>
方向鍵可以控制角度<br>
如撞到防空氣球則會引爆,可以繼續發射下一個飛彈
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r78/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>

CSS

#info {
  position: absolute;
  top: 0px;
  width: 100%;
  padding: 10px;
  text-align: center;
  color: #ffff00
}

body {
  overflow: hidden;
}

JavaScript

var camera, scene, renderer, controls;

var keyboard = new KeyboardState();

var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
var pickables = [];

var mass = 1;
var clock = new THREE.Clock();



var missiles = [];
var obs = [];
var ob_counter = 0;
var texMat;
var booms = [] ;

function buildSprite(texMat) {

  var geometry = new THREE.Geometry();
  geometry.vertices.push(
    new THREE.Vector3(-15, -15, 0),
    new THREE.Vector3(15, -15, 0),
    new THREE.Vector3(15, 15, 0),
    new THREE.Vector3(-15, 15, 0)
  );

  var face;
  face = new THREE.Face3(0, 1, 2);
  geometry.faces.push(face);
  face = new THREE.Face3(0, 2, 3);
  geometry.faces.push(face);

	// upper left corner
	var uv0 = new THREE.Vector2(0.0,0.75);
	var uv1 = new THREE.Vector2(0.125,0.75);
	var uv2 = new THREE.Vector2(0.125,1.0);
	var uv3 = new THREE.Vector2(0.0,1.0);
  
  geometry.faceVertexUvs[0].push([uv0, uv1, uv2]);
  geometry.faceVertexUvs[0].push([uv0, uv2, uv3]);

  geometry.computeBoundingSphere();
  geometry.computeFaceNormals();
  geometry.computeVertexNormals();

  sprite = new THREE.Mesh(geometry, texMat);
  sprite.scale.set(3,3,3);
  return sprite;
}

var Boom = function(){
  this.uvOffsetArray = [];
  this.baseS = 0;
  this.baseT = 0;
  this.counter = 0;
  this.sprite;
  this.texMat = texMat.clone();
  this.isboom = true;

	this.setUpOffsetArray();

  this.mesh = buildSprite(this.texMat);
  
  scene.add(this.mesh);
}
Boom.prototype.setUpOffsetArray = function(){
	var rowCount = 4; // 4x8 sprites
  var colCount = 8;
  for (var i = 0; i < rowCount; i++) {
    var row = [];
    for (var j = 0; j < colCount; j++)
      row.push(new THREE.Vector2(j * 0.125, - 0.25 * i));
    this.uvOffsetArray.push(row);
  }
}
Boom.prototype.spriteAnimate = function() {
  //console.log (uvOffsetArray[baseS][baseT]);
  
	this.mesh.material.map.offset.copy (this.uvOffsetArray[this.baseS][this.baseT]);  
  this.baseT = (this.baseT + 1) % 8;
  if (this.baseT === 0) {
    this.baseS =...