回答編集履歴

2

返信に対してのサンプル追加

2019/07/20 10:05

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -87,3 +87,107 @@
87
87
  }
88
88
 
89
89
  ```
90
+
91
+
92
+
93
+ ---
94
+
95
+
96
+
97
+ > 上のフローチャートのように、分岐した後、動画7に必ずたどり着くようなプログラム
98
+
99
+
100
+
101
+ なんかそんな気がしていた、結局そっちも聞かれるんじゃないか、と。(質問を新しくした方がいいような気がするが)
102
+
103
+ もちろん方法はいろいろありますが、そこそこ融通を効かせられるようにこんな「考え方」はどう?
104
+
105
+ ```Processing
106
+
107
+ final int[][] StoryBoard={ //再生のプログラム表
108
+
109
+ {0}, //選択肢を羅列する。要素一つだと選択の余地なし
110
+
111
+ {1},
112
+
113
+ {2},
114
+
115
+ {3, 4, 5}, //複数記述するとその中のどれか
116
+
117
+ {6},
118
+
119
+ {7, 8, 9},
120
+
121
+ {10}
122
+
123
+ };
124
+
125
+
126
+
127
+ int storyIndex=0;
128
+
129
+ int playIndex;
130
+
131
+
132
+
133
+ void setup() {
134
+
135
+ textSize(24); //見栄えだけ
136
+
137
+ textAlign(CENTER, CENTER); //見栄えだけ
138
+
139
+ playIndex=getFirst();//最初の要素を選択
140
+
141
+ }
142
+
143
+
144
+
145
+ void draw() {
146
+
147
+ background(0);
148
+
149
+ text(playIndex+1, width/2, height/2);
150
+
151
+ }
152
+
153
+
154
+
155
+ void keyPressed() {
156
+
157
+ playIndex=getNext();//次の要素を選択
158
+
159
+ }
160
+
161
+
162
+
163
+ int getPlay() {
164
+
165
+ int n=StoryBoard[storyIndex].length;
166
+
167
+ return StoryBoard[storyIndex][(int)random(0, n)];//選択肢分のランダムでピックアップ
168
+
169
+ }
170
+
171
+ int getFirst(){
172
+
173
+ storyIndex=0;
174
+
175
+ return getPlay();
176
+
177
+ }
178
+
179
+ int getNext(){
180
+
181
+ storyIndex=storyIndex+1;
182
+
183
+ if(storyIndex>=StoryBoard.length){
184
+
185
+ storyIndex=0;
186
+
187
+ }
188
+
189
+ return getPlay();
190
+
191
+ }
192
+
193
+ ```

1

サンプル追加

2019/07/20 10:04

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -1,3 +1,89 @@
1
1
  Video.loop()で再生しているのにはなにか理由がありますか。Video.play()で再生すれば一回しか再生しません。
2
2
 
3
3
  Video.duration()で動画の全長が、またVideo.time()で再生中の時間が得られます。最後まで再生が終わるとtime()の値がduration()と同じになるみたいなので(明示的なドキュメントは見つけていません)、それを監視していれば再生の終了を検知出来るでしょう。
4
+
5
+
6
+
7
+ ---
8
+
9
+ 仕様が修正されたので、少しプログラムを書いてみました。
10
+
11
+ こんなサンプルで参考になりますでしょうか。(要素の参考にするためで、仕様を書き下したものではありません)
12
+
13
+ ```Processing
14
+
15
+ import processing.video.*;
16
+
17
+
18
+
19
+ final int MOVIENUM=11;
20
+
21
+
22
+
23
+ Movie[] movie=new Movie[MOVIENUM];
24
+
25
+ int n=0;//再生中の動画番号
26
+
27
+ Movie currentMovie;//再生中の動画オブジェクト
28
+
29
+
30
+
31
+ void setup() {
32
+
33
+ size(320, 240);
34
+
35
+ for (int i=0; i<MOVIENUM; i++) {//連番の動画ファイルを取得
36
+
37
+ movie[i]=new Movie(this, "mv"+(i+1)+".mov");//ファイルは適宜変更
38
+
39
+ }
40
+
41
+ currentMovie=movie[n];//動画を設定
42
+
43
+ currentMovie.loop();
44
+
45
+ }
46
+
47
+
48
+
49
+ void draw() {
50
+
51
+ image(currentMovie, 0, 0);
52
+
53
+ }
54
+
55
+
56
+
57
+ void movieEvent(Movie m) {
58
+
59
+ m.read();
60
+
61
+ }
62
+
63
+
64
+
65
+ void keyPressed() {
66
+
67
+ if (currentMovie!=null) {//オブジェクトの準備が出来る前はアクセス禁止
68
+
69
+ currentMovie.stop();//これまで再生中だった動画を停止
70
+
71
+ if (key==' ') { //スペースで順送り
72
+
73
+ n=(n+1)%MOVIENUM;
74
+
75
+ } else if (key==ENTER) { //Enterでランダム
76
+
77
+ n=int(random(3, 6));
78
+
79
+ }
80
+
81
+ currentMovie=movie[n];//再生動画を設定
82
+
83
+ currentMovie.loop();//次の動画をループ再生
84
+
85
+ }
86
+
87
+ }
88
+
89
+ ```