如何在Processing中只使用一个草图在两个窗口中播放视频

时间:2016-09-02 09:49:22

标签: processing video-processing serial-communication

我想在Processing中只使用一个草图在两个窗口中播放视频。 我也想使用串口通讯.. 串行通信运行良好,但视频无法正常工作。 我想该程序无法找到视频的位置。

我在Processing中搜索过一个草图的多个窗口。 我提到了这个。 How to create more than one window of a single sketch in Processing?

这是我写的代码。

我希望你帮助我

代码

 
import processing.video.*;
import processing.serial.*;

Serial myPort;  // Create object from Serial class
String val;     // Data received from the serial port

Movie mov;

void setup() {
  size(100, 100);

  String[] args = {"TwoFrameTest"};


 SecondApplet sa = new SecondApplet();
  ThirdApplet na = new ThirdApplet();
  PApplet.runSketch(args, sa);
  PApplet.runSketch(args, na);

  String portName = Serial.list()[1];
  myPort = new Serial(this, portName, 9600);

  sa.mov = new Movie(this, "transit.mov");
  sa.mov.loop();

}




void draw() {
  background(0);
  ellipse(50, 50, 10, 10);

  if (myPort.available() > 0) {
    if ( (val = myPort.readStringUntil(ENTER)) != null )  val = trim(val);
    else return;
    if (val != null) {
      println(val);
    }
    }

}     

public class SecondApplet extends PApplet {
public Movie mov;

  public void settings() {
    size(500, 500);
  }


  public void draw() {

    fill(0);
    ellipse(100, 50, 10, 10);

  if ("3Low".equals(val)) {
    fill(255,random(255),200);
      ellipse(60,20,100,100);
    }

    sa.image(sa.mov,0,0);

  }
}



public class ThirdApplet extends PApplet {


  public void settings() {
    size(500, 500);
  }

  public void draw() {

    fill(0);
    ellipse(100, 50, 10, 10);

  if ("3Low".equals(val)) {
    fill(255,random(255),200);
      ellipse(60,20,100,100);
    }


  }
}

1 个答案:

答案 0 :(得分:0)

  

我想程序无法找到视频的位置。

请更具体。您看到了什么确切的错误消息?你期望发生什么?会发生什么呢?

  

我想在Processing中只使用一个草图在两个窗口中播放视频。

您发布的代码使用三个不同的草图,并且您在每个草图的范围内做了奇怪的事情。只需将每个草图写成完全独立的草图,然后最后添加链接代码。

我不知道为什么你不能用两个不同的草图来播放两部不同的电影。它可能看起来像这样:

 
Movie movieOne;

void setup() {
  size(100, 100);

  movieOne = new Movie(this, "MovieOne.mov");
  movieOne.loop();

  String[] args = {"SecondSketch"};
  SecondSketch sa = new SecondSketch();
  PApplet.runSketch(args, sa);
}

void draw() {
  image(movieOne, 0, 0);
}     

public class SecondSketch extends PApplet {
  Movie movieTwo;

  public void settings() {
    size(500, 500);
    movieTwo = new Movie(this, "MovieTwo.mov");
    movieTwo.loop();
  }

  public void draw() {
    image(movieTwo, 0, 0);
  }
}

请注意,这只是示例代码,我甚至没有尝试编译它。您可能需要更改一些内容才能使其正常工作,但这应该可以让您大致了解要采取的方法。

更简单的选项可能是使用createGraphics()函数创建两个缓冲区。将电影绘制到每个缓冲区,然后将缓冲区绘制到屏幕上。

Movie movieOne;
Movie movieTwo;

PGraphics bufferOne;
PGraphics bufferTwo;

void setup() {
  size(1000, 500);

  bufferOne = createGraphics(500, 500);
  bufferTwo = createGraphics(500, 500);

  movieOne = new Movie(this, "MovieOne.mov");
  movieOne.loop();

  movieTwo = new Movie(this, "MovieTwo.mov");
  movieTwo.loop();
}

void draw() {
  bufferOne.beginDraw();
  bufferOne.image(movieOne, 0, 0);
  bufferOne.endDraw();

  bufferTwo.beginDraw();
  bufferTwo.image(movieTwo, 0, 0);
  bufferTwo.endDraw();

  image(bufferOne, 0, 0);
  image(bufferTwo, 500, 0);
}   

同样,这只是您可能需要修改才能完美运行的示例代码。

可以在the refrence找到更多信息。

如果您仍无法使其正常运行,请在新问题中发布更新后的MCVE,我们将从那里开始。