Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2016-09-07 23:26:17 Mon premier programme avec P5js :)

EricRG
membre
Lieu: Bretagne
Date d'inscription: 2008-03-11
Messages: 167

Mon premier programme avec P5js :)



J'ai repris un ancien jeu que j'avais écrit avec Processing

Il est presque fini (à part quelques bugs à la fin, quelques réglages) : www.ericgarcia.net/test

Je vais aussi rajouter quelques effets sonores.

J'ai utilisé principalement le mode p5js tout nouveau de Processing 3

J'ai aussi accès à l'éditeur en javascript sur mon linux installé avec un .deb mais s'il est bien joli les messages d'erreurs sont moins précis qu'avec Processing 3


je voudrais que le bouton rejouer à la fin provoque le réaffichage de la page dans le navigateur ça doit être simple en javascript !!!???

c'est un peu brouillon comme code mais bon, pour un premier jet je suis content que ça marche !

Je voudrais ne pas utiliser la fonction preload pour avoir une barre de défilement à la place.
ca doit être possible avec les "callback" !
si quelqu'un l'a déjà fait ça m'intéresse.

smile

Je n'ai pas utilisé la bibliothèque Play car c'est plus facile de tout refaire que de se plonger dedans !!!

N.B. Je n'arrive pas à utiliser de fontes de caractères, ça ne semble pas marcher !!! Bizarre

Le code :

var logoTitre,fond,interro;
var YFOND=113,LARGEURVIGNETTE=125,HAUTEURVIGNETTE=120,YSTART=520,NOTFAR=10;
var ECART=1,MARGEAFFICHAGEVIGNETTES=5; // pour les positions de départ des dessins
var isSpriteDragged=false; // Pour ne pouvoir prendre qu'une vignette à la fois
var sprites,messages; // affichages dans draw()
var halt=false; // halt pour arrêter le jeu pendant les messages
var imageMessageDebut,imageMessageFinal,imageMessageOeufs,imageMessageTetard1,imageMessageTetard2,imageMessageBebe,imageMessageAdulte;
var spriteMessageDebut,spriteMessageFinal,spriteMessageOeufs,spriteMessageTetard1,spriteMessageTetard2,spriteMessageBebe,spriteMessageAdulte;
var imageJouer=[],imageRejouer=[],imageContinuer=[];
var mouseWasPressed=false;

// pour la logique de l'affichage des messages
var msg,sprt,msgVu;

function preload() {
  logoTitre=loadImage("data/logoTitre.gif");
  fond=loadImage("data/fond.jpg");
  interro=loadImage("data/interro.png");
  imageMessageDebut=loadImage("data/msgDebut.jpg");
  imageMessageFinal=loadImage("data/msgFinal.jpg");
  imageMessageOeufs=loadImage("data/msgOeufs.jpg");
  imageMessageTetard1=loadImage("data/msgTetard1.jpg");
  imageMessageTetard2=loadImage("data/msgTetard2.jpg");
  imageMessageBebe=loadImage("data/msgBebe.jpg");
  imageMessageAdulte=loadImage("data/msgAdulte.jpg");

  for (var i=0;i<2;i++) {
    imageJouer[i]=loadImage("data/jouer"+i+".png");
    imageRejouer[i]=loadImage("data/rejouer"+i+".png");
    imageContinuer[i]=loadImage("data/continuer"+i+".png");
  }
}

function setup() {
  createCanvas(640,640);
 
 


 
 
 
 
  sprites=new Sprites();
 
  sprt=[
  new Sprite("oeufs",MARGEAFFICHAGEVIGNETTES+1*(LARGEURVIGNETTE+ECART),YSTART,455,170+YFOND),
  new Sprite("tetard1",MARGEAFFICHAGEVIGNETTES+2*(LARGEURVIGNETTE+ECART),YSTART,286,275+YFOND),
  new Sprite("tetard2",MARGEAFFICHAGEVIGNETTES+3*(LARGEURVIGNETTE+ECART),YSTART,70,190+YFOND),
  new Sprite("bebe",MARGEAFFICHAGEVIGNETTES+4*(LARGEURVIGNETTE+ECART),YSTART,88,34+YFOND),
  new Sprite("adulte",MARGEAFFICHAGEVIGNETTES+0*(LARGEURVIGNETTE+ECART),YSTART,250,20+YFOND)
  ];
 
  for (var i=0;i<5;i++) sprites.add(sprt[i]);
 

  msg=[
  new MsgSprite(100,100,imageMessageOeufs,imageContinuer[0],imageContinuer[1],213,170),
  new MsgSprite(100,100,imageMessageTetard1,imageContinuer[0],imageContinuer[1],213,170),
  new MsgSprite(100,100,imageMessageTetard2,imageContinuer[0],imageContinuer[1],213,170),
  new MsgSprite(100,100,imageMessageBebe,imageContinuer[0],imageContinuer[1],213,170),
  new MsgSprite(100,100,imageMessageAdulte,imageContinuer[0],imageContinuer[1],213,170)
  ];
 
   
  messages=new Sprites();
 
  for (var i=0;i<5;i++) messages.add(msg[i]);
 
  spriteMessageDebut=new MsgSprite(100,100,imageMessageDebut,imageJouer[0],imageJouer[1],213,170);
  messages.add(spriteMessageDebut);
  spriteMessageFinal=new MsgSprite(100,100,imageMessageFinal,imageRejouer[0],imageRejouer[1],213,170);
  messages.add(spriteMessageFinal);
 
  msgVu=[false,false,false,false,false];
 
 
  // sprites.melange(); // Pour que les vignettes d'en bas soient affichées dans un ordre aléatoire
 
  // Message de départ
  halt=true;
  spriteMessageDebut.isVisible=true;
 

}

function draw() {
  background(255);
 
  // Affichage de base
  image(logoTitre,40,3);
  image(fond,0,YFOND);
 
  sprites.draw();
  messages.draw();
 
  // Gestion de l'affichage des messages
 
  for (var i=0;i<5;i++) {
    if (sprt[i].enPlace && !msgVu[i]) {
      halt=true;
      msg[i].isVisible=true;
      msgVu[i]=true;
    }
  }
 

  if (!halt) spriteMessageFinal.isVisible=true;
  for (var i=0;i<5;i++) {
    if (!msgVu[i]) spriteMessageFinal.isVisible=false;
  }
 
 
} // Fin draw()


var Sprite=function(name,startA,startB,endA,endB) { // endX/Y : positions / au fond
  this.name=name;
  this.startA=startA;
  this.startB=startB;
  this.a=startA;
  this.b=startB;
  this.endA=endA;
  this.endB=endB;
  this.vignette=fond.get(endA,endB-YFOND,LARGEURVIGNETTE,HAUTEURVIGNETTE);
  this.drag=false;
  this.enPlace=false;
  this.isVisible=true;
}

Sprite.prototype.draw=function() {
  if (this.enPlace==false) {
    image(interro,this.endA,this.endB);
    image(this.vignette,this.a,this.b);
    /*
    if (this.over()) {  // test over()
      line(this.a,this.b,this.a+LARGEURVIGNETTE,this.b+HAUTEURVIGNETTE);
      line(this.a+LARGEURVIGNETTE,this.b,this.a,this.b+HAUTEURVIGNETTE);
    }
    */
   
    // drag
    if (mouseIsPressed && halt==false) {
      if (this.drag) {
        this.a+=mouseX-pmouseX;
        this.b+=mouseY-pmouseY;
      } else {
        if (this.over() && !isSpriteDragged) {
          this.drag=true;
          isSpriteDragged=true;
          sprites.front(this.name);
        }
      }
    } else {
      if (this.drag) {
        if (this.a>this.endA-NOTFAR && this.a<this.endA+NOTFAR && this.b>this.endB-NOTFAR && this.b<this.endB+NOTFAR) { // vignette en place
          this.enPlace=true;
        } else {
          this.a=this.startA;
          this.b=this.startB;
          this.drag=false;
        }
        isSpriteDragged=false;
      }
    }
  }
}

Sprite.prototype.over=function() {
  if (mouseX>=this.a && mouseX<=this.a+LARGEURVIGNETTE && mouseY>=this.b && mouseY<=this.b+HAUTEURVIGNETTE) {
    return true;
  } else {
    return false;
  }
}

var MsgSprite=function(a,b,msgImage,buttonImage0,buttonImage1,buttonA,buttonB) {
  this.a=a;
  this.b=b;
  this.msgImage=msgImage;
  this.buttonImage0=buttonImage0;
  this.buttonImage1=buttonImage1;
  this.buttonA=buttonA;
  this.buttonB=buttonB;
  this.isVisible=false;
  this.myWidth=buttonImage0.width;
  this.myHeight=buttonImage0.height;
}

MsgSprite.prototype.buttonOver=function() {
  if (mouseX>=this.a+this.buttonA && mouseX<=this.a+this.buttonA+this.myWidth && mouseY>=this.b+this.buttonB && mouseY<=this.b+this.buttonB+this.myHeight) {
    return true;
  } else {
    return false;
  }
}

MsgSprite.prototype.buttonClicked=function() {
  if (mouseWasPressed) {
    if (!mouseIsPressed) {
      mouseWasPressed=false;
      if (this.buttonOver()) return true;
      else return false;
    }
  } else {
    if (mouseIsPressed) mouseWasPressed=true;
    return false;
  }
}

MsgSprite.prototype.draw=function() {
  image(this.msgImage,this.a,this.b);
  if (this.buttonOver()) {
    image(this.buttonImage1,this.a+this.buttonA,this.b+this.buttonB);
  } else {
    image(this.buttonImage0,this.a+this.buttonA,this.b+this.buttonB);
  }
  if (this.buttonClicked()) {
    this.isVisible=false;
    halt=false;
  }
}

var Sprites=function() {
  this.sprites=[];
}

Sprites.prototype.add=function(sprite) {
  this.sprites=append(this.sprites,sprite);
}


Sprites.prototype.draw=function() {
  if (this.sprites.length>0) {
    for (var i=0;i<this.sprites.length;i++) {
      if (this.sprites[i].isVisible) this.sprites[i].draw();
    }
  }
}

Sprites.prototype.front=function(name) { // pour ammener au premier plan la vignette "name", message d'erreur console si le name n'est pas trouvé. nécessaire pendant le "drag" d'une vignette
  noLoop(); //attendre que la réorganisation soit faite pour relancer draw() sinon clignotement d'une paire d'images
  var j,aSprite;
  if (this.sprites[this.sprites.length-1].name!=name) {
    for (var i=0;i<this.sprites.length-1;i++) {
      if (this.sprites[i].name==name) j=i;
    }
    aSprite=this.sprites[j];
    for (var i=j;i<this.sprites.length-1;i++) {
      this.sprites[i]=this.sprites[i+1];
    }
    this.sprites[this.sprites.length-1]=aSprite;
  }
  loop();
}

Dernière modification par EricRG (2016-09-07 23:35:52)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017