Game Development Reference
In-Depth Information
Some things you may want to do with particles can get quite complicated. For
example, to simulate spray from a waterfall, you might use particles with some
physics applied. To simplify similar advanced use cases, two libraries have emerged.
One of them, called
Sparks
, is actually included with Three.js in the
examples/js
folder. It's also available online at
https://github.com/zz85/sparks.js
and is
written by
zz85
. A newer library written by
Luke Moody
and
Lee Stemkoski
is available
at
https://github.com/squarefeet/ShaderParticleEngine
, and while relatively
untested, the API is simpler and it's somewhat lighter in weight.
Sound
Although Three.js is a graphics library, there is an experimental
THREE.AudioObject
class at
examples/js/AudioObject.js
that uses the Web Audio API to support
3D sound effects. This object inherits from
Object3D
so it can be attached to other
objects and placed in the world. It is designed to use spatially accurate 3D sound.
The main caveat is that the class only works with Chrome as of Three.js version r61
due to browser incompatibilities.
Like with external models, audio is loaded with AJAX, so
local file URLs won't work by default.
That said, let's go ahead and try adding some cheering sounds when a flag is
captured. First, we'll create our
AudioObject
instances when we initialize our flags:
var cheering = new THREE.AudioObject('cheering.ogg', 0, 1, false);
scene.add(cheering);
This code creates an object to play the
cheering.ogg
file with a volume of
0
, a
playback rate of
1
, and no looping. We set the volume to zero initially because
AudioObject
plays the sound immediately, and we only want it to play when we
capture a flag. To that end, let's trigger the sound to play when we capture a flag:
THREE.AudioObject.call(cheering, 'cheering.ogg', 1, 1, false);
AudioObject
does not provide a way to play a sound again, so we have to call
the constructor to force it to do that. This time, we set the volume to
1
. The crowd
goes wild!
If you set the final parameter to
true
instead of
false
, you can also use this to play
looping sounds or even music.