質問するログイン新規登録

回答編集履歴

2

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

2019/07/20 10:05

投稿

thkana
thkana

スコア7781

answer CHANGED
@@ -42,4 +42,56 @@
42
42
  currentMovie.loop();//次の動画をループ再生
43
43
  }
44
44
  }
45
+ ```
46
+
47
+ ---
48
+
49
+ > 上のフローチャートのように、分岐した後、動画7に必ずたどり着くようなプログラム
50
+
51
+ なんかそんな気がしていた、結局そっちも聞かれるんじゃないか、と。(質問を新しくした方がいいような気がするが)
52
+ もちろん方法はいろいろありますが、そこそこ融通を効かせられるようにこんな「考え方」はどう?
53
+ ```Processing
54
+ final int[][] StoryBoard={ //再生のプログラム表
55
+ {0}, //選択肢を羅列する。要素一つだと選択の余地なし
56
+ {1},
57
+ {2},
58
+ {3, 4, 5}, //複数記述するとその中のどれか
59
+ {6},
60
+ {7, 8, 9},
61
+ {10}
62
+ };
63
+
64
+ int storyIndex=0;
65
+ int playIndex;
66
+
67
+ void setup() {
68
+ textSize(24); //見栄えだけ
69
+ textAlign(CENTER, CENTER); //見栄えだけ
70
+ playIndex=getFirst();//最初の要素を選択
71
+ }
72
+
73
+ void draw() {
74
+ background(0);
75
+ text(playIndex+1, width/2, height/2);
76
+ }
77
+
78
+ void keyPressed() {
79
+ playIndex=getNext();//次の要素を選択
80
+ }
81
+
82
+ int getPlay() {
83
+ int n=StoryBoard[storyIndex].length;
84
+ return StoryBoard[storyIndex][(int)random(0, n)];//選択肢分のランダムでピックアップ
85
+ }
86
+ int getFirst(){
87
+ storyIndex=0;
88
+ return getPlay();
89
+ }
90
+ int getNext(){
91
+ storyIndex=storyIndex+1;
92
+ if(storyIndex>=StoryBoard.length){
93
+ storyIndex=0;
94
+ }
95
+ return getPlay();
96
+ }
45
97
  ```

1

サンプル追加

2019/07/20 10:04

投稿

thkana
thkana

スコア7781

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