2017-09-06 4 views
2

Quelle est la meilleure façon de faire défiler en douceur la couleur d'un arrière-plan (ainsi que d'autres choses) en utilisant cos ou sin dans java, sans utiliser plus d'un fichier? J'ai essayé d'utiliser le hasard et d'augmenter chaque valeur de r, g et b séparément pour que cela soit normal, mais c'est nerveux, pas lisse, et les couleurs sont horribles. En ce moment, c'est tout simplement blanc. Je ne comprenait que le code nécessaire, et je me sers de traitement 3.Quelle est la meilleure façon de mettre en œuvre un fond de cycle de couleur?

//background 
int bg1 = 255; //r 
int bg2 = 255; //g 
int bg3 = 255; //b 

void draw() { 
fill(bg1,bg2,bg3); 
} 

Répondre

1

Vous avez l'idée générale vers le bas. Il est un processus en trois étapes:

  • Étape 1: déclarer des variables en haut de votre croquis.
  • Étape 2: Utilisez ces variables pour dessiner votre scène.
  • Étape 3: Changer les variables au fil du temps.

Ceci est l'approche de base pour créer une animation dans Processing. Here est un tutoriel avec plus d'informations.

Voici un petit exemple qui montre une fenêtre que les cycles entre le blanc et le noir:

float c = 0; 

float cChange = 1; 

void draw(){ 

    background(c); 

    c += cChange; 
    if(c < 0 || c > 255){ 
    cChange *= -1; 
    } 
} 

Vous devez faire quelque chose de similaire, mais avec 3 valeurs de couleur au lieu de 1. Notez que je suis seulement changer la couleur par une petite quantité à chaque fois, ce qui le rend lisse au lieu de nerveux.

Si vous rencontrez encore des problèmes, veuillez poster une nouvelle mise à jour MCVE dans une nouvelle question et nous allons partir de là. Bonne chance.

+0

Merci. Cela fonctionne avec un peu de peaufinage! – Icy4614

-1

Ne comprenez pas ce que vous entendez par cos et sin par rapport à la couleur de fond. Mais peut-être que quelque chose comme ça est ce que tu veux?

void draw(){ 
int H = frameCount%1536; 
background(color(abs(H-765)-256,512-abs(H-512),512-abs(H-1024))); 
} 
1

Si vous souhaitez spécifiquement utiliser une onde sinusoïdale en entrée plutôt que la vague en dents de scie alors vous devez mapper votre entrée (par exemple le temps) dans une certaine gamme de couleurs. Par exemple:

  1. toutes les 2000 millisecondes valeur augmente de 0 à 2,0
  2. plages de valeurs
  3. de -1 à 1.
  4. la sortie sin (valeur) est comprise entre -1 et 1.
  5. carte la sortie vers une gamme de couleurs.

map() fonctionne bien pour les valeurs de cartographie, mais vous pouvez également utiliser colorMode() pour les gammes de couleurs de cartographie - donc plutôt que de déplacer vos valeurs de sortie sinus autour, juste faire votre sortie 0-2,0 et définissez la valeur RGB max ou HSB à 2,0 au lieu de 255.

Voici quelques exemples, en simultané dans un sketch:

float val; 
float out; 

void draw() { 
    background(0); 
    val = TWO_PI * (millis()%2000)/2000.0; // every 2000 milliseconds value increases from 0 to 2PI 
    out = sin(val); 

    // white-black (256-0) 
    pushStyle(); 
    fill(128 + 128*out); 
    rect(0,0,50,50); 
    popStyle(); 

    // red-black (255-0) 
    pushStyle(); 
    colorMode(RGB, 255); 
    fill(255*(out+1), 0, 0); 
    rect(50,0,50,50); 
    popStyle(); 

    // hue rainbow (0-2) 
    pushStyle(); 
    colorMode(HSB, 2.0); 
    fill(out+1, 2, 2); 
    rect(0,50,50,50); 
    popStyle(); 

    // hue blue-green (3 to 5/9) 
    pushStyle(); 
    colorMode(HSB, 9); 
    fill(out+4, 9, 9); 
    rect(50,50,50,50); 
    popStyle(); 

    translate(width/2,height/2 - out * height/2); 
    ellipse(0,0,10,10); 
} 

enter image description here