从鼠标坐标播放处理视频?

问题描述

我正在尝试制作一个程序,根据鼠标坐标的位置播放不同的视频。基本上打开一个普通窗口并四处移动鼠标,如果鼠标坐标在一组数字之间,则播放第一个视频。然后当鼠标坐标在另一组数字之间时,播放第2个视频。

我编写了一个基本代码,根据鼠标坐标更改文本。摘录如下:

void setup() {
  size(934,887);
}

void draw(){
  background(0);
//if x is between 46 and 339 AND y is between 46 and 249,then 1
  if((46<mouseX && mouseX<339)&&(46<mouseY && mouseY<249)){
    textSize(20);
    text("1",width/2,height/2);
  }

//if x is between 46 and 339 AND y is between 249 and 464,then 2
  if((46<mouseX && mouseX<339)&&(249<mouseY && mouseY<464)){
    textSize(20);
    text("2",height/2);
  }

我想使用相同的概念,但现在播放不同的视频而不是显示不同的文本。我不知道该怎么做,因为我看过的处理视频教程有不同的虚空设置和虚空绘制以及仅用于播放视频的所有内容,我不知道如何与我自己的鼠标跟踪代码结合使用。我需要创建多个窗口吗?这将如何运作?谢谢!

解决方法

假设即使我们正在观看另一个视频,您也希望视频继续播放,这很容易:我们将不同的视频作为 setup() 方法中的 Movie 对象加载,然后让它们播放循环而鼠标坐标指示当前正在播放的视频。下面是一段代码片段来演示:

import processing.video.*;
Movie lightbulbs,sample360;

void setup() {
  size(800,600);

  lightbulbs = new Movie(this,"lightbulbs.mov");
  sample360 = new Movie(this,"360.mov");

  lightbulbs.loop();  // .play(); will play it once,.loop() will start over again after the last frame
  sample360.loop();
}

void draw() {
  background(0);

  if (mouseX < width/2) {
    image(lightbulbs,0);
  } else {
    image(sample360,0);
  }
  
  // here's a line so we see clearly where the movie changes in the example
  stroke(255);
  line(width/2,width/2,height);
}

void movieEvent(Movie m) {
  m.read();
}

为了尽可能轻松地加载我的电影,我进入了草图的文件夹并创建了一个 data 文件夹。 Processing 将识别此文件夹,并且每当您尝试加载文件而不指定路径时,它都会在其中查找它(因此我保存了我的示例电影):

data folder

movies

电影有点重,所以我会让你弄清楚在哪里可以找到自己的电影。 Peronnaly 我只是在谷歌上搜索了“免费 .mov 样本”并从那里随机挑选了一些。

对我来说它是这样的(它在旅途中调整了大小以使文件更轻):

zapping between channels

如果您有任何疑问,我会在附近闲逛,但我认为这会尊重您的基本概念并完成工作。玩得开心!