Fragmentations
De Centre de Ressources Numériques - Labomedia
Révision de 20 septembre 2013 à 12:18 par Olivier (discussion | contributions)
Petit sketch Processing à base de carrés qui se déplacent et de rollover.
Visible ici via OpenProcessing.
// Copyright 2013 - Olivier Baudu.
// Publié sous termes de la licence publique GPL v3.0.
Cluster[] clusters;
int taillePuce, tailleParcours, nbClusters, nbPuce;
int bord, nbCLusterParLigne, nbLignes;
void setup() {
taillePuce =10;
nbPuce = 10;
bord = 1;
tailleParcours = 50;
nbLignes = 8;
nbCLusterParLigne = 4;
nbClusters = nbCLusterParLigne * nbLignes;
noStroke();
size(nbCLusterParLigne*(taillePuce+bord)*nbPuce, nbLignes*(tailleParcours+taillePuce+bord));
clusters = new Cluster[nbClusters];
for (int i=0; i<clusters.length; i++) {
clusters[i] = new Cluster(i%nbCLusterParLigne, i/nbCLusterParLigne);
}
}
void draw() {
background(0);
for (int i=0; i < clusters.length; i++) {
clusters[i].dessine();
}
}
class Cluster {
int initIA, decalage;
Puce[] puces;
Cluster (int posX, int posY) {
puces = new Puce[nbPuce];
initIA = 0;
decalage = int(random(20));
for (int i=0; i<puces.length; i++) {
puces[i] = new Puce(i*(taillePuce+bord) + posX*(nbPuce*(taillePuce+bord)) + 1,
(tailleParcours + taillePuce + bord)*posY + 1);
}
}
void dessine() {
actionIA();
for (int i=0; i < puces.length; i++) {
puces[i].dessine();
}
}
void actionIA() {
if (frameCount%(nbPuce+500+decalage) == 1) {
initIA = 0;
}
if (frameCount%int(random(nbPuce*2)+1) == 0) {
if (initIA >=0 && initIA < nbPuce) {
puces[initIA].choixIA = true;
}
initIA++;
}
}
}
class Puce {
int x, y, initX, initY;
int vitesse, direction;
boolean testAction, posHaut, choixIA;
Puce (int posX, int posY) {
initX = posX;
initY = posY;
x = posX;
y = posY;
direction = 1;
vitesse = 2;
testAction = false;
posHaut = true;
choixIA = false;
}
void dessine() {
testRollOver(x, y);
deplace();
rect(x, y, taillePuce, taillePuce);
}
void deplace() {
if (testAction) {
if (posHaut && y <= initY+tailleParcours+vitesse ) {
direction = 1;
if (y == initY+tailleParcours+vitesse) {
posHaut = false;
testAction = false;
choixIA = false;
}
}
if (!posHaut && y >= initY+vitesse ) {
direction = -1;
if (y == (initY+vitesse)) {
posHaut = true;
testAction = false;
choixIA = false;
}
}
y += direction*vitesse;
}
}
void testRollOver(int posX, int posY) {
if (mouseX >= posX && mouseX <= posX+taillePuce &&
mouseY >= posY && mouseY <= posY+taillePuce &&
testAction == false || choixIA) {
testAction = true;
}
}
}