Processing序列动画单音轨仅Class Two响应、背景控制及时序问题求助
修正后完整代码
import processing.sound.*; // 全局音频资源,全程仅加载一次 SoundFile bgm; Amplitude volAnalyzer; color bg = #222222; // 自行替换为你需要的背景色 color progressColor = #FFFFFF; // 对应原代码未定义的d变量,这里定义为进度条颜色 One objectone; Two objecttwo; Three objectthree; int animCounter = 0; boolean openingAnimation = false; boolean startAnimation = false; void setup() { size(displayWidth, displayHeight); frameRate(50); // 全局加载音频,仅初始化一次 bgm = new SoundFile(this, "music.mp3"); bgm.loop(); volAnalyzer = new Amplitude(this); volAnalyzer.input(bgm); objectone = new One(); // 给Two类传入全局音频分析器 objecttwo = new Two(volAnalyzer); objectthree = new Three(); } void draw() { if (openingAnimation) { if (animCounter > 0 && animCounter < 750) { objectone.show1(); } animCounter++; } if (startAnimation) { if (animCounter > 0 && animCounter < 2500) { objecttwo.update2(); objecttwo.show2(); } else if (animCounter > 2500 && animCounter < 3000) { objectthree.update3(); objectthree.show3(); } // 全局进度条 if (animCounter > 0 && animCounter < 9000) { fill(progressColor); noStroke(); // 修正rect参数:x,y,宽度,高度 rect(0, height-10, map(animCounter, 0, 9000, 0, width), 10); } animCounter++; } } void keyPressed() { if (key == ' ') { openingAnimation = true; animCounter = 0; } } void mousePressed() { startAnimation = true; openingAnimation = false; animCounter = 0; } class One { void show1() { background(bg); // 此处添加One类的绘制逻辑 } } class Two { Amplitude vol; // 构造函数接收全局的振幅分析器 Two(Amplitude volAnalyzer) { this.vol = volAnalyzer; } void update2() { // 此处添加Two类的状态更新逻辑 } void show2() { background(bg); // 仅当前类调用音频分析,实现仅该类响应音频 float howLoud = vol.analyze(); // 此处添加Two类的绘制逻辑,可使用howLoud变量做声音响应效果 } } class Three { void update3() { // 此处添加Three类的状态更新逻辑 } void show3() { background(0); // 此处添加Three类的绘制逻辑 } }
内容的提问来源于stack exchange,提问作者Natalie Tian
相关产品推荐
相关产品推荐

