Как рандомизировать определенные цвета при обработке - PullRequest
0 голосов
/ 30 апреля 2018

Мне нужна помощь для рандомизации определенных цветов на Processing с использованием функций Array. Например, я хочу, чтобы цвета были только red, blue, yellow and green. Как я могу гарантировать, что когда каждая отдельная буква отражается от стены, цвет буквы меняется на один из этих цветов?

Ниже мой код, очень признателен за помощь.

String word = "bounce";
char[] letters;
ArrayList<Letter> letterObjects;
boolean ballFall = false;
PFont font;
color randColour = color (0);
Letter l;

void setup () {
    size (500, 500);
    pixelDensity(displayDensity());
    textAlign(CENTER);
    textSize(30);
    letters = word.toCharArray();
    letterObjects = new ArrayList<Letter>();
    font = createFont("AvenirNext-Medium", 50);
    textFont(font);

    //iterate over the letter array
    //for each letter create a new object
    //add this object to an ArrayLost
    for (int i = 0; i<letters.length; i++) {
        char currentLetter = letters[i];
        float currentPosition = i * 30;
        letterObjects.add(new Letter(currentLetter, 180 + currentPosition, height/2));
    }
}

void draw () {
    background(255);

    for (Letter l : letterObjects) {
        l.display();
    }

    if (ballFall == true) {
        for (Letter l : letterObjects) {
            l.move();
            l.bounce();
        }
    }
}

void mouseClicked() {
    ballFall = true;
}

Письмо класс

class Letter {
    char character;
    float x, y;
    float xSpeed, ySpeed;
    float distance;

    Letter(char _c, float _x, float _y) {
        character = _c;
        x = _x;
        y = _y;

        //x = random(width);
        //y = random(height);
        xSpeed = random(1, 3);
        ySpeed = random(1, 3);
    }

    void move () {
        x += xSpeed*2;
        y += ySpeed*2;
    }

    void bounce () {
        if (x<0 || x>width) {
            xSpeed *=-1;
            randColour = color (random(255), random (255), random(255));
        }

        if (y<0 || y>height) {
            ySpeed *=-1;
            randColour = color (random(255), random (255), random(255));
        }
    }

    void display () {
        fill(randColour);
        text(character, x, y);
    }
}

1 Ответ

0 голосов
/ 30 апреля 2018

Составьте список цветов, которые вы хотите выбрать из

color red = #FF0000;
color blue = #0000FF;
color yellow = #FFFF00;
color green = #00FF00;
color[] colors = { red, blue, yellow, green };

Затем используйте метод random, чтобы выбрать индекс в массиве. И используйте цвет по этому индексу:

Для вашего случая вы можете написать свой класс Letter следующим образом: Предполагая, что остальная часть кода, использующая класс Letter, работает правильно

class Letter {
    char character;
    float x, y;
    float xSpeed, ySpeed;
    float distance;

    // Declare the colors you want to use in a an array
    color red = #FF0000;
    color blue = #0000FF;
    color yellow = #FFFF00;
    color green = #00FF00;
    color[] colors = { red, blue, yellow, green };
    color randColor;

    Letter(char _c, float _x, float _y) {
        character = _c;
        x = _x;
        y = _y;

        //x = random(width);
        //y = random(height);
        xSpeed = random(1, 3);
        ySpeed = random(1, 3);

        // Pick a random initial color 
        randColor = colors[int(random(colors.length))];
    }

    void move () {
        x += xSpeed*2;
        y += ySpeed*2;
    }

    void bounce () {
        if (x<0 || x>width) {
            xSpeed *= -1;
            // Pick a random color
            randColor = colors[int(random(colors.length))];
        } else if (y<0 || y>height) {
            ySpeed *= -1;
            // Pick a random color
            randColor = colors[int(random(colors.length))];
        }
    }

    void display () {
        fill(randColor);
        text(character, x, y);
    }
}
...