你说的是时间问题。 time() 函数似乎有点错误,而且它似乎永远不会达到 period() 值。目前,一个快速的解决方法是在控制台中打印 time() 和uration() ,并使用duration() 和last time() 值之间的差异来计算偏移量,从而使电影播放完成条件通过。
我想从代码开始。一开始也没关系,它可以更短,更容易管理。
目前您的代码中有很多重复(请参阅D.R.Y. https://en.wikipedia.org/wiki/Don%27t_repeat_yourself),
但这可以通过 for 循环和数组来避免。
for 循环
这些并不像听起来那么可怕。
循环可让您轻松重复某个操作,无论该操作是什么。
语法看起来有点复杂,但一旦你意识到它只有 3 个部分,就不再那么复杂了。
想象一下从位置 A 以一定的步数到达位置 B。
第一个位置 A 是初始化 for 循环的值:告诉计算机从哪里开始 countint。
然后传递位置 B,即要停止循环的值。
第三个也是最后一个要素是增量:您将从 A 移动到 B 需要多少步。
语法看起来有点像这样:
for (start ; stop; steps){
//do something here
}
例如,让我们从 0 数到 9:
for(var start = 0; start < 10; start = start + 1){
println(start);
}
将 for 循环计数器变量命名为 i 是常见的做法,但这只是一个约定。
只要保持一致,就可以随意命名它,无论它对您来说更有意义:
for(int i = 0 ; i < 10 ; i++){
println(i);
}
好的,这就是 for 循环。还不错,而且它们会很有趣,尤其是当你开始时
绘制图案/网格/等。屏幕上。
arrays
数组是一种结构,允许您在同一名称下存储多个值的跟踪。
例如,如果使用简单的整数变量存储单个整数值,
使用整数数组,您可以将一堆同名的整数值分组。
声明数组的语法与通常用于声明变量的语法类似
(毕竟这只是一种不同类型的变量)。有一些区别:
- 你需要使用[]
在数组类型之后
- 你需要使用new
键盘并指定数组/列表的大小
所以如果你像这样声明一个整数:
int i = 0;
你可以像这样声明一个整数数组(假设是 10):
int[] tenInts = new int[10];
[] 符号的作用是它不仅用来告诉 java 它正在处理一个数组,
但它允许您检索和设置数组中的元素。
这是使用索引来完成的,数组从 0 开始索引元素。
因此,要访问数组中的第一个元素,您将使用tenInts[0]
这是因为我们现在有一个零数组。
假设您要将第三个元素设置为 1。这将是索引 2,因此您可以使用它来访问数组元素并设置其值:
println("3rd element: " + tenInts[2]);//will print 0
tenInts[2] = 1;
println("3rd element: " + tenInts[2]);//will print 1
现在您已经掌握了将其组合在一起的所有要素,而无需重复太多代码:
import processing.video.*;
int numMovies = 6;//total number of movies
Movie[] playlist = new Movie[numMovies];//a list of all the movie objects, currently not initialized
int currentMovieIndex = 0;//index of the movie currently playing
float movieEndDuration = 0.029719;//a 'magic number' helpful to find out when a movie finishes playing
void setup(){
size(800,500);
for(int i = 0 ; i < numMovies; i++){
//initialize each movie object in the list
playlist[i] = new Movie(this,"transit.mov");//new Movie(this, "ch"+(i+1)+".mp4");
}
//start playback
playlist[currentMovieIndex].play();
}
void draw(){
background(0);
image(playlist[currentMovieIndex],0,0);
}
void movieEvent(Movie m){
m.read();
//handy for debugging and figuring out the 'magic number'
println(m.time() + " / " + m.duration() + " / " + (m.time() + movieEndDuration));
//hacky check movie end
if((m.time() + movieEndDuration) >= m.duration()){
println("movie at index " + currentMovieIndex + " finished playback");
//go to the next movie index
currentMovieIndex = (currentMovieIndex+1) % numMovies;//increment by one buy use % to loop back to index 0 when the end of the movie array is reached
//use this to tell the next movie in the list to play
playlist[currentMovieIndex].play();
println("movie at index " + currentMovieIndex + " started");
}
}