配列とランダム関数の組み合わせ方が分かりません。
random
はfloat
(小数)を返すので、配列のインデックスに使うにはint
(整数)に直す必要があります。
random() / Reference / Processing.org
int() / Reference / Processing.org
Processing
1PImage[] imgs;
2PImage img;
3float imgX;
4float imgVX;
5
6void setup() {
7 size(800, 800);
8
9 imgs = new PImage[] {
10 loadImage("https://www.gravatar.com/avatar/1f4f0a2782fdb4f59c0acc14a7455416?d=identicon", "png"),
11 loadImage("https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail.jpg"),
12 };
13
14 imgVX = random(1, 5); // 1以上5未満のfloat値
15
16 float f = random(imgs.length); // 0以上2未満のfloat値(1.234のような)
17 int i = int(f); // 0か1(小数点以下を切り捨てる)
18 img = imgs[i];
19
20 //img = imgs[int(random(imgs.length))]; // まとめて書くと
21}
22
23void draw() {
24 background(127);
25
26 mato();
27}
28
29void mato() {
30 if (width < imgX) {
31 imgX = 0;
32 imgVX = random(1, 5);
33 img = imgs[int(random(imgs.length))];
34 }
35
36 image(img, imgX, 150, 50, 50);
37 imgX += imgVX;
38}
Processing
1Character[] charas;
2Character chara;
3
4void setup() {
5 size(800, 800);
6
7 PImage img1 = loadImage("https://www.gravatar.com/avatar/1f4f0a2782fdb4f59c0acc14a7455416?d=identicon", "png");
8 PImage img2 = loadImage("https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail.jpg");
9 charas = new Character[] { new Character(img1, 0, 150, 2), new Character(img2, 0, 150, 3), };
10 chara = charas[int(random(charas.length))];
11}
12
13void draw() {
14 background(127);
15
16 chara.move();
17 chara.display();
18}
19
20
21class Character {
22 PImage img;
23 float xpos;
24 float ypos;
25 float xspeed;
26
27 Character(PImage tempImg, float tempXpos, float tempYpos, float tempXspeed) {
28 img = tempImg;
29 xpos = tempXpos;
30 ypos = tempYpos;
31 xspeed = tempXspeed;
32 }
33
34 void display() {
35 image(img, xpos, ypos, 50, 50);
36 }
37
38 void move() {
39 xpos += xspeed;
40 if (width < xpos) {
41 xpos = 0;
42 xspeed = random(1, 5);
43 // ここでグローバル変数をいじるのはどうかとは思うが、まあいいでしょうw
44 chara = charas[int(random(charas.length))];
45 }
46 }
47}