📄 simplesoundsbehavior.java
字号:
package ch06.section09;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.net.URL;
import java.util.Enumeration;
// 定义一个用于播放声音的类
public class SimpleSoundsBehavior
extends Behavior {
WakeupOnElapsedTime wt;
WakeupOnBehaviorPost wp;
BackgroundSound sound1 = new BackgroundSound();
PointSound sound2 = new PointSound();
PointSound sound3 = new PointSound();
static int WAKEUP_SOUND = 0;
int soundIndex = 0;
URL URLName1;
URL URLName2;
URL URLName3;
BoundingSphere bounds;
// 覆盖父类的 initialize 方法
public void initialize() {
MediaContainer sample1 = new MediaContainer();
MediaContainer sample2 = new MediaContainer();
MediaContainer sample3 = new MediaContainer();
sample1.setCapability(MediaContainer.ALLOW_URL_WRITE);
sample1.setCapability(MediaContainer.ALLOW_URL_READ);
sample1.setURLObject(URLName1);
sample1.setCacheEnable(false);
sound1.setLoop(0);
sound1.setContinuousEnable(false);
sound1.setReleaseEnable(false);
sound1.setSoundData(sample1);
sound1.setInitialGain(0.7f);
sample2.setCapability(MediaContainer.ALLOW_URL_WRITE);
sample2.setCapability(MediaContainer.ALLOW_URL_READ);
sample2.setURLObject(URLName2);
sound2.setLoop(Sound.INFINITE_LOOPS);
sound2.setContinuousEnable(false);
sound2.setReleaseEnable(false);
sound2.setSoundData(sample2);
sound2.setInitialGain(2.0f);
Point3f sound2Pos = new Point3f( -30.0f, 0.0f, 0.0f);
sound2.setPosition(sound2Pos);
sample3.setCapability(MediaContainer.ALLOW_URL_WRITE);
sample3.setCapability(MediaContainer.ALLOW_URL_READ);
sample3.setURLObject(URLName3);
sound3.setContinuousEnable(false);
sound3.setReleaseEnable(false);
sound3.setSoundData(sample3);
sound3.setInitialGain(4.0f);
Point3f sound3Pos = new Point3f(30.0f, 0.0f, 0.0f);
sound3.setPosition(sound3Pos);
wt = new WakeupOnElapsedTime(2000);
WakeupOnElapsedTime wp = new WakeupOnElapsedTime(5000);
wakeupOn(wp);
}
// 覆盖父类的 processStimulus 方法以控制声音的播放
public void processStimulus(Enumeration criteria) {
switch (soundIndex) {
// Active
case 0:
// 播放第一种声音
sound1.setEnable(true);
wakeupOn(wt);
break;
case 1:
// 播放第二种声音
sound2.setEnable(true);
wakeupOn(wt);
break;
case 2:
case 4:
case 6:
case 8:
case 10:
// 播放第三种声音
sound3.setEnable(true);
wakeupOn(wt);
break;
case 3:
case 5:
case 7:
case 9:
// 停止的第三种声音的播放
sound3.setEnable(false);
wakeupOn(wt);
break;
case 11:
// 停止第二种声音的播放
sound2.setEnable(false);
wakeupOn(wt);
break;
case 12:
// 停止第一种声音的播放
sound1.setEnable(false);
wt = new WakeupOnElapsedTime(400000);
wakeupOn(wt);
break;
default:
break;
}
soundIndex++;
}
//
// 类构造器
// 参数: 声音节点
// 声音文件名
// 声音的有效范围
//
public SimpleSoundsBehavior(BackgroundSound sound1,
PointSound sound2,
PointSound sound3,
URL urlName1,
URL urlName2,
URL urlName3,
BoundingSphere soundBounds) {
this.sound1 = sound1;
this.sound2 = sound2;
this.sound3 = sound3;
this.URLName1 = urlName1;
this.URLName2 = urlName2;
this.URLName3 = urlName3;
this.bounds = (BoundingSphere) soundBounds.clone();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -