**Cette page peut être supprimée**
====== Skeudennoù-bev gant p5.js ======
Implijet e vo ar yezh p5.js evit deskiñ tresañ traoù war ar skramm. Ar yezh p5.js a zo diazezet war ar yezh javascript. Graet eo evit bezañ peurgaset diouzh ur merdeer hag aes eo da enframmañ ar poelladoù skrivet ganti e-barzh ur bajenn Web.
Ne'z eus ket ezhomm staliañ netra evit kregiñ da kodiñ gant p5.js. Tu 'zo deoc'h implij un "éditeur" enlinenn, evel [[https://editor.p5js.org|amañ]].
===== Tresañ gant livioù =====
function setup() {
createCanvas(400, 400);
}
function draw() {
background(200, 200, 255); // Livet e vez ar foñs
fill(10, 220, 50); // Dibabet e vez un liv nevez (tost da gwer)
rect(280, 100, 80, 80); // Treset e vez ur skouergornek
fill(255, 60, 200); // Dibabet e vez ul liv nevez (tost da roz)
ellipse(width/2, height/2, 100, 200); // Treset un elips
}
Ar fonksion ''background'' a servij da livañ ar prenestr grafik penn-da-benn gant al liv o peus c'hoant. Diverket e vo pep tra a oa bet treset araok. Roet e vez dezhi 3 arguzenn : ur c'hementad a ruz (etre 0 ha 255), ur c'hementad a gwer (etre 0 ha 255) hag ur c'hementad a glas (etre 0 ha 255).
Bep gwech ma vez implijet ur fonksion gant livioù e vo roet 3 arguzenn (Ruz, Gwer, Glas) evel-se.
Ar fonksion ''fill'' a vez implijet evit dibab ul liv nevez. Gwellet e vo an disoc'h gant pep fonksion tresañ a teuio warlec'h.
Gant ar fonksion ''rect'' e vez treset ur skouergornek. Roet e vez dezhi 4 arguzenn : position x, position y, ment x ha ment y.
Gant ar fonksion ''ellipse'' e vez treset un elips. Roet e vez dezhi 4 arguzenn : position kreiz x, position kreiz y, ment x, ment y.
[[https://editor.p5js.org/lise_diwan/sketches/cLT-9X1Gg]]
===== Lakaat an traoù da fiñval =====
function setup() {
let x; // Krouiñ ur varienn 'x'
let y; // Krouiñ ur varienn 'y'
function setup() {
createCanvas(400, 400);
fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
x = 20; // Deraouiñ ar varienn 'x'
y = 20; // Deraouiñ ar varienn 'y'
}
function draw() {
background(255); // Livet e vez ar foñs e gwenn kann
ellipse(x, y, 50, 50); // Treset e vez ur c'helc'h d'an daveenoù 'x' ha 'y'
x += 1; // Kemmet e vez ar varienn 'x'
y += 1; // Kemmet e vez ar varienn 'y'
}
Amañ e vez krouet div varienn, ''x'' hag ''y'' evit derc'hel daveenoù ur c'helc'h. Bep gwech ma vez peurgaset ar fonksion ''draw'' (30 wech dre eilenn dre ziouer) e vo diverket ar prenest, treset ar c'helc'h gant an daveenoù ''x'' hag ''y'' hag cheñchet an deveenoù un tammig.
Klaskit cheñch an doare ma fiñv ar c'helc'h.
[[https://editor.p5js.org/lise_diwan/sketches/Y0rEj1ue5]]
===== Wrap around =====
Ur gudenn on eus. Ma'z a re bell hor c'helc'h e vo er maez eus hor prenestr. Implijet e vo ur framm konsision evit gwiriekaat daveenoù ar c'helc'h hag adlakaat anezho el lec'h mat ma'z eont kuit eus ar prenestr.
function setup() {
let x; // Krouiñ ur varienn 'x'
let y; // Krouiñ ur varienn 'y'
function setup() {
createCanvas(400, 400);
fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
x = 20; // Deraouiñ ar varienn 'x'
y = 20; // Deraouiñ ar varienn 'y'
}
function draw() {
background(255); // Livet e vez ar foñs e gwenn kann
ellipse(x, y, 50, 50); // Treset e vez ur c'helc'h d'an daveenoù 'x' ha 'y'
x += 3.6; // Kemmet e vez ar varienn 'x'
y += 2.2; // Kemmet e vez ar varienn 'y'
if (x>width) {
x -= width;
}
if (x<0) {
x += width;
}
if (y>height) {
y -= height;
}
if (y<0) {
y += height;
}
}
Gwirieket e vez 4 kondision gant ar stadamant ''if'' : Ma'z eo ''x'' er maez eus an tu kleiz ''x<0'', ma'z eo ''x'' er maez eus an tu dehou ''x>width'', ma'z eo ''y'' re izel ''y>height'' ha ma'z eo ''y'' re uhel ''y<0''.
E-barzh ar variennoù ''width'' ha ''height'' e vez dalc'het ledander hag uhelder ar prenestr grafik.
Merzet ho peus maretez e oa tuet fall ax an uhelder. Gwir eo, war ur skramm, al linenn gant an daveen ''y=0'' a zo en nec'h tout ha pa vez kresket an daveen ''y'' ez a izeloc'h an traoù. Ar poent ''0, 0'' a zo en nec'h en tu kleiz hag ar poent ''width, heigh'' a zo en traoñ hag en tu dehou eus ar prenestr.
[[https://editor.p5js.org/lise_diwan/sketches/kCFd7pKGe]]
===== Ur bern objedoù o fiñval =====
War un urzhiataer, pa vez graet un dra gant un elfenn n'eo ket diaes tre ober ar memes tra gant un niver bras tre a elfennoù eñvel.
let x = [4, 53, 233, 12, 300, 210]; // Krouiñ ul listenn 'x'
let y = [320, 111, 23, 201, 50, 15]; // Krouiñ ul listenn 'y'
function setup() {
createCanvas(400, 400);
fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
}
function draw() {
background(255); // Livet e vez ar foñs e gwenn kann
for (let i=0; iwidth) {
x[i] -= width;
}
if (x[i]<0) {
x[i] += width;
}
if (y[i]>height) {
y[i] -= height;
}
if (y[i]<0) {
y[i] += height;
}
}
}
Amañ e vez gwelet ur bern traoù nevez ha galoudus. Implijet e vez listennoù evit derc'hel meur a variennoù dameñvel. Implijet e vez ar rodell ''for'' evit //iteriñ// war pep talvoud kavet e-barzh al listennoù.
Menozioù : Klaskit krouiñ 2 listennad nevez ''tizh_x'' ha ''tizh_y'' evit derc'hel un tizh disheñvel evit pep kelc'h. Al listennoù-se a vo ar memes ment eget ar re all (6 elfenn ma n'ho peus ket cheñchet an traoù).
[[https://editor.p5js.org/lise_diwan/sketches/vSCogDPDm]]
===== Let's get Crazy ! =====
Termeniñ pep kelc'h dre dorn a zo skuizus. Penaos ober evit termeniñ un niver bras tre a kelc'hoù (pe traoù all) en un doare aes ? Implijet e vo ar rodell ''for'' en-dro evit-se.
let x = []; // Krouiñ ul listenn goulo 'x'
let y = []; // Krouiñ ul listenn goulo 'y'
let niver = 500; // Niver a elfennoù da grouiñ
function setup() {
createCanvas(400, 400);
fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
// Amañ e vo leuniet al listennoù dre ur rodell 'for'
for (let i=0; iwidth) {
x[i] -= width;
}
if (x[i]<0) {
x[i] += width;
}
if (y[i]>height) {
y[i] -= height;
}
if (y[i]<0) {
y[i] += height;
}
}
}
[[https://editor.p5js.org/lise_diwan/sketches/a7_tCZmO0]]
===== Spritesheets =====
Gant ar yezh p5.js ez eus tu enframmañ skeudennoù gif bev met pa 'vez kalz a skeudennoù bev disheñvel da implij e-barzh ho poellad e c'hell dont da vezañ luziet buhan a walc'h.
Un doare all d'ober a zo lakaat ur bern tresadennoù bihan war ar memes skeudenn, anvet ur "spritesheet". Evit krouiñ ur skeudenn bev e vo diskouezet nemet un lodennig eus ar skeudenn bras bep gwech.
Pouezus e vefe eus ar memes ment pep skeudennig eus ar spritesheet.
Ur skouer spritesheet eus ar re gentañ e istor mab den :
{{ https://upload.wikimedia.org/wikipedia/commons/4/4a/Muybridge_race_horse_gallop.jpg?nolink&400 }}
let img;
let img_size = 32;
let x_pos, y_pos;
let last_frame;
const frame_dur = 800;
const animation = [[0, 3], [1, 3]];
let frame_i;
function preload() {
img = loadImage("data/toto.png");
}
function setup() {
createCanvas(400, 400);
imageMode(CENTER);
x_pos = width/2;
y_pos = height-4*img_size;
last_frame = millis();
frame_i = 0;
}
function draw() {
background(255);
if (millis() - last_frame >= frame_dur) {
frame_i += 1;
last_frame = millis();
if (frame_i >= animation.length) {
frame_i = 0;
}
}
image(img, x_pos, y_pos,
img_size*4, img_size*4,
img_size*animation[frame_i][0],
img_size*animation[frame_i][1],
img_size, img_size);
}
[[https://editor.p5js.org/lise_diwan/sketches/gpLMaorbY5]]
===== Aotomata =====
Setu an teknik diwezhañ a vo gwelet evit krouiñ ur sekañs skeudennoù-bev o cheñch ingal.
Gant pep animasion e klot ur stad. Pep stad a zo liammet gant stadoù all ha pa 'vez cheñchet stad ne c'heller nemet mont betek ar stadoù liammet d'ar stad diwezhañ.
Pa vez loc'het ar poellad e vez aet d'ar stad a-orin (an hini gwer war ar skeudenn). Pa 'vez erruet d'ar stad fin (an hini ruz) e vez echu ar c'hoari ("Game Over").
Evit cheñch stad e vez tenet un niverenn er sort (evel gant un diñs) hag hervez an disoc'h e vez aet betek ur stad pe ur stad all.
{{ :lise_diwan:aotomata.png?nolink&400 |}}
// Listenn ar skeudennoù evit pep animasion
const anim_dihunet = [[6, 1]];
const anim_dihun = [[0, 0]];
const anim_bazailhat = [[4, 4], [4, 4], [4, 4]];
const anim_kousket = [[0, 3], [1, 3]];
const anim_skrab = [[5, 2], [6, 2], [5, 2], [6, 2], [5, 2], [6, 2]];
const anim_marv = [[6, 4]];
// Ment pep skeudennig (e pixels)
const img_size = 32;
// Padelez pep skeudenn en animasion
const frame_dur = 400;
// Roadennoù all...
let anim;
let frame_i;
let last_frame;
let stad;
let rand;
let img;
let x_pos, y_pos;
function preload() {
// Karg ar spritesheet e memor an urzhiataer
img = loadImage("data/toto.png");
}
function setup() {
createCanvas(400, 400);
imageMode(CENTER);
x_pos = width/2;
y_pos = height-4*img_size;
last_frame = millis();
frame_i = 0;
stad = "DIHUNET";
anim = anim_dihunet;
}
function draw() {
background(255);
if (millis() - last_frame >= frame_dur) {
// Tremen d'ar skeudenn da-heul
frame_i += 1;
last_frame = millis();
if (stad == "DIHUNET") {
rand = int(random(20));
if (rand == 0) {
// Bazailhat
anim = anim_bazailhat;
frame_i = 0;
stad = "BAZAILHAT";
} else if (rand == 1) {
// En em skrabañ
anim = anim_skrab;
frame_i = 0;
stad = "SKRAB";
}
} else if (stad == "DIHUN") {
anim = anim_dihunet;
frame_i = 0;
stad = "DIHUNET";
} else if (stad == "BAZAILHAT") {
// Gortoz e vefe echu an animasion araok cheñch stad
if (frame_i == anim.length) {
if (random(6) < 1.0) {
// Mont da gousket
anim = anim_kousket;
frame_i = 0;
stad = "KOUSKET";
} else {
// Dihunet
anim = anim_dihunet;
frame_i = 0;
stad = "DIHUNET";
}
}
} else if (stad == "KOUSKET") {
rand = int(random(100));
if (rand == 0) {
anim = anim_marv;
frame_i = 0;
stad = "MARV";
} else if (rand < 6) {
anim = anim_dihun;
frame_i = 0;
stad = "DIHUN";
}
} else if (stad == "SKRAB") {
if (frame_i == anim.length) {
anim = anim_dihunet;
frame_i = 0;
stad = "DIHUNET";
}
} else if (stad == "MARV") {
anim = anim_marv;
}
// Distreiñ en penn kentañ an animation ma'z eo echu
if (frame_i >= anim.length) {
frame_i = 0;
}
}
// Tresañ ar skeudenn
image(img, x_pos, y_pos,
img_size*4, img_size*4,
img_size*anim[frame_i][0],
img_size*anim[frame_i][1],
img_size, img_size);
}
[[https://editor.p5js.org/lise_diwan/sketches/pOJwECXkE]]