【问题标题】:how to play videos in two windows by using just one single sketch in Processing如何在处理中仅使用一个草图在两个窗口中播放视频
【发布时间】:2016-09-02 09:49:21
【问题描述】:

我想在 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);
    }


  }
}

【问题讨论】:

    标签: processing video-processing serial-communication


    【解决方案1】:

    我猜程序找不到视频在哪里。

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

    我想通过在 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,我们将从那里开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多