Up today, I would like to display the text "Game Over" when the raft impacts an obstacle in my Three.js / Physijs game. I can already do it in the JavaScript console, but I need a way to convey to the user that she / he has lost.
I investigate TextGeomtry (example) some, but decide that feels like overkill for my needs. I just want to display regular text.
It turns out that simple HTML will suffice for this. That is how the Three.js stats does it. So I replace the "game over"
console.log() with a call to a new gameOver() function:function drawObstacles() {
obstacle_markers.forEach(function(marker) {
// build obstacle
obstacle.addEventListener('collision', function(object) {
if (object == raft) gameOver();
else {
console.log(object);
}
});
});
}
In gameOver(), I create a new <div>, style it, and position it for maximum impact:function gameOver() {
console.log("Game Over!!!!");
var text = document.createElement('div');
text.style.position = 'absolute';
text.innerHTML = '<h1>Game Over!</h1>';
text.style.backgroundColor = 'white';
text.style.borderRadius = "5px";
text.style.padding = "0px 20px";
text.style.left = "100px";
text.style.top = "100px";
document.body.appendChild(text);
game_over = true;
}For good measure, I set the global variable game_over to true. In my animate() function I then add a guard clause to stop the animation if the game is over:function animate() {
if (game_over) return;
requestAnimationFrame(animate);
applyRiverCurrent();
scene.simulate(); // run physics
render();
drawObstacles();
}With that, I have my desired game-over behavior:That will do for a stopping point today. Now back to writing Gaming JavaScript. It's deadline day!
Day #495

No comments:
Post a Comment