我还是比较新的Processing。我们正在考虑在一个小型展览的循环中展示我们的加工工作。有没有办法在循环中播放多个PDE?我知道我可以导出为帧然后将它们组装成一个更长的循环Quicktime文件,但我想知道是否有任何方法可以自己播放和循环文件?
此外,对于交互式偏微分方式,呈现它们的最佳方式是什么?我们正在考虑在Processing中运行几台带有PDE的计算机,但是让文件运行20分钟然后打开另一个文件20分钟会很不错。
提前致谢!
答案 0 :(得分:3)
您应该能够组合使用processing-java command line executable的shell /批处理脚本。
您应该可以通过工具>进行设置。安装"处理-java"
如果您对bash / batch脚本无法轻松,您甚至可以编写启动处理草图的处理草图
使用selectFolder()和exec()对此进行了粗略的处理:
final int SKETCH_RUN_TIME = 10000;//10 seconds for each sketch, feel free to change
ArrayList<File> sketches = new ArrayList<File>();
int sketchIndex = 0;
void setup(){
selectFolder("Select a folder containing Processing sketches:", "folderSelected");
}
void draw(){
}
void nextSketch(){
//run sketch
String sketchPath = sketches.get(sketchIndex).getAbsolutePath();
println("launching",sketchPath);
Process sketch = exec("/usr/local/bin/processing-java",
"--sketch="+sketchPath,
"--present");
//increment sketch index for next time around (checking the index is still valid, otherwise go back to 0)
sketchIndex++;
if(sketchIndex >= sketches.size()){
sketchIndex = 0;
}
//delay is deprecated so you shouldn't use this a lot, but as a proof concept this will do
delay(SKETCH_RUN_TIME);
nextSketch();
}
void folderSelected(File selection) {
if (selection == null) {
println("No folder ? Ok, maybe another time. Bye! :)");
exit();
} else {
File[] files = selection.listFiles();
//filter just Processing sketches
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
String folderName = files[i].getName();
File[] sketchFiles = files[i].listFiles();
boolean isValidSketch = false;
//search for a .pde file with the same folder name to check if it's a valid sketch
for(File f : sketchFiles){
if(f.getName().equals(folderName+".pde")){
isValidSketch = true;
break;
}
}
if(isValidSketch) {
sketches.add(files[i]);
}else{
System.out.println(files[i]+" is not a valid Processing sketch");
}
}
}
println("sketches found:",sketches);
nextSketch();
}
}
对代码进行了评论,因此希望它易于阅读和遵循。 系统将提示您选择包含要运行的草图的文件夹。
注1:我已在我的计算机上使用processing-java
路径(/usr/local/bin/processing-java
)。如果你在Windows上,这可能会有所不同,你需要改变它。
注2: processing-java
命令启动另一个Process,这使得在运行下一个草图之前关闭上一个草图变得棘手。作为一种解决方法,您可以在需要的时间后在每个草图上调用exit()。
注3:代码不会递归遍历包含草图的选定文件夹,因此只会执行第一级草图,应忽略更深层次的草图。