Up tonight, I hope to build on the "Game Over" text that I added my Three.js / Physijs game yesterday.
I start by generalizing slightly so that initializing my scoreboard, initializes an absolutely positioned
<div> with an ID by which I refer it later:function initScoreBoard() {
var text = document.createElement('div');
text.id = 'scoreboard';
text.style.position = 'absolute';
text.style.backgroundColor = 'white';
text.style.borderRadius = "5px";
text.style.padding = "0px 20px";
text.style.left = "50px";
text.style.top = "75px";
text.style.height = "100px";
document.body.appendChild(text);
writeScoreBoard(
'j / k to turn; space to move' +
'
'<br/>' +
'Press space to start'
);
}At the very end of that function, I invoke writeScoreBoard(), which does the job of overwriting the innerHTML of the scoreboard <div>, but in a reusable way:function writeScoreBoard(message) {
var text = document.getElementById('scoreboard');
text.innerHTML = message;
}
With that out of the way, I modify the start of the game to store the start time and to start a timer:var start;
function startGame() {
start = new Date();
runTimer();
animate();
}The runTimer() gets called recursively until the game is over, continuously updating the time on the scoreboard:function runTimer() {
if (game_over) return;
var now = new Date()
, diff = now.getTime() - start.getTime()
, seconds = diff / 1000;
writeScoreBoard(seconds);
setTimeout(runTimer, 500);
}And that seems to work fairly well:Last up, I need to stop the game when the raft reaches the end point. For that, I add a ray to the raft pointing straight down. I continuously check to see what it intersects and, once it hits the lake at the bottom, the game is over with the final score:
function checkForWin() {
var ray = new THREE.Ray(
raft.position,
new THREE.Vector3(0, -1, 0)
);
var intersects = ray.intersectObject(lake);
if (!intersects[0]) return;
game_over = true;
var time = writeTime();
writeScoreBoard(
'<h1>Win!</h1>' +
'<p>You won it in' +
'<br>' +
time + ' seconds. Yay!</p>'
);
}And, indeed that does the trick:I still hope to shrink the game—both in size and complexity. But I think this more or less completes it for Gaming JavaScript.
Day #496


Where can I play the game?
ReplyDeleteYou play it in your browser. But the only way to get it is to buy the book and build the game yourself :D
DeleteIf you're interested, the book is available at here: http://gamingjs.com/ (and just about every bookseller as well).