{"id":2141,"date":"2016-01-01T00:47:02","date_gmt":"2015-12-31T23:47:02","guid":{"rendered":"http:\/\/www.lyceelecorbusier.eu\/p5js\/?p=2141"},"modified":"2016-10-09T18:56:07","modified_gmt":"2016-10-09T17:56:07","slug":"p5-js-13-fonctions","status":"publish","type":"post","link":"https:\/\/www.lyceelecorbusier.eu\/p5js\/?p=2141","title":{"rendered":"\/ p5.js \/ 14 \/ Fonctions"},"content":{"rendered":"<p style=\"text-align: center;\"><!--more--><\/p>\n<p>La puissance des fonctions est leur modularit\u00e9. Les fonctions sont des unit\u00e9s ind\u00e9pendantes (des briques) qui sont utilis\u00e9s pour construire des programmes plus complexes. <em>setup()<\/em> et <em>draw() <\/em>sont des fonctions tout comme <em>preload<\/em> ou <em>mousePressed<\/em>.<br \/>\nIl est possible de cr\u00e9er ses propres fonctions.<\/p>\n<p>Partons de ce magnifique <strong>SpaceInvader<\/strong><\/p>\n<pre>function setup(){\r\ncreateCanvas(800,600);\r\nbackground(255);\r\nstroke(0);\r\n}\r\nfunction draw(){\r\nfill(0);\r\nrect(20,0,10,10);\r\nrect(80,0,10,10);\r\nrect(30,10,10,10);\r\nrect(70,10,10,10);\r\nrect(20,20,20,10);\r\nrect(40,20,30,20);\r\nrect(70,20,20,10);\r\nrect(10,30,20,20);\r\nrect(80,30,20,20);\r\nrect(0,40,10,30);\r\nrect(30,40,50,20);\r\nrect(100,40,10,30);\r\nrect(20,50,10,20);\r\nrect(80,50,10,20);\r\nrect(30,70,20,10);\r\nrect(60,70,20,10);\r\n}<\/pre>\n<p>La code est d\u00e9j\u00e0 fastidieux&#8230; si je veux dessiner plusieurs SpaceInvader il faut dupliquer le code, ajouter un <em>translate();<\/em>&#8230; pas cool ! Et je ne parle m\u00eame pas de le faire bouger !<\/p>\n<p>Heureusement il est possible de cr\u00e9er une fonction <em>spaceInvader();<\/em><\/p>\n<pre>function setup(){\r\ncreateCanvas(800,600);\r\nbackground(255);\r\nstroke(0);\r\n}\r\n\r\nfunction draw(){\r\n\u00a0\u00a0 \u00a0spaceInvader(10,10);\r\n\u00a0\u00a0 \u00a0spaceInvader(150,10);\r\n}\r\n\r\nfunction spaceInvader(x,y){\r\n\u00a0\u00a0 \u00a0fill(0);\r\n\u00a0\u00a0 \u00a0push();\r\n\u00a0\u00a0 \u00a0translate(x,y);\r\nrect(20,0,10,10);\r\nrect(80,0,10,10);\r\nrect(30,10,10,10);\r\nrect(70,10,10,10);\r\nrect(20,20,20,10);\r\nrect(40,20,30,20);\r\nrect(70,20,20,10);\r\nrect(10,30,20,20);\r\nrect(80,30,20,20);\r\nrect(0,40,10,30);\r\nrect(30,40,50,20);\r\nrect(100,40,10,30);\r\nrect(20,50,10,20);\r\nrect(80,50,10,20);\r\nrect(30,70,20,10);\r\nrect(60,70,20,10);\r\npop();\r\n}<\/pre>\n<p>Les param\u00e8tres de la fonction sont un \u00e9l\u00e9ment de flexibilit\u00e9 important <em>function spaceInvader(x,y) { }<br \/>\n<\/em><span id=\"result_box\" class=\"\" lang=\"fr\"><span class=\"hps\">Chaque<\/span> <span class=\"hps\">param\u00e8tre est une variable<\/span> <span class=\"hps\">qui est cr\u00e9\u00e9<\/span> <span class=\"hps\">\u00e0 chaque fois que<\/span> <span class=\"hps\">la fonction<\/span> est ex\u00e9cut\u00e9e. <span class=\"hps\">Lorsque<\/span> <span class=\"hps\">cet exemple<\/span> <span class=\"hps\">est ex\u00e9cut\u00e9,<\/span> <span class=\"hps\">la premi\u00e8re<\/span> <span class=\"hps\">fois que la fonction<\/span> <em>spaceInvader(x,y)<\/em> <span class=\"hps\">est appel\u00e9<\/span>, <span class=\"hps\">la valeur du<\/span> <span class=\"hps\">param\u00e8tre<\/span> <span class=\"hps\">x<\/span> <span class=\"hps\">est<\/span> <span class=\"hps\">10<\/span>, <span class=\"hps\">et y est<\/span> <span class=\"hps\">\u00e9galement<\/span> <span class=\"hps\">10. Dans<\/span> <span class=\"hps\">la<\/span> <span class=\"hps\">seconde<\/span> <span class=\"hps\">utilisation<\/span> <span class=\"hps\">de la fonction,<\/span> <span class=\"hps\">la valeur de x<\/span> <span class=\"hps\">et y<\/span> <span class=\"hps\">est<\/span> <span class=\"hps\">150 <\/span><span class=\"hps\">est de nouveau<\/span> <span class=\"hps\">10.<\/span> <span class=\"hps\">Chaque valeur<\/span> <span class=\"hps\">est pass\u00e9e dans<\/span> <span class=\"hps\">la fonction et ensuite<\/span> <span class=\"hps\">partout o\u00f9 le<\/span> <span class=\"hps\">nom de la variable<\/span> <span class=\"hps\">appara\u00eet<\/span> <span class=\"hps\">dans la fonction,<\/span> <span class=\"hps\">il est<\/span> <span class=\"hps\">remplac\u00e9 par la valeur<\/span><span class=\"\">.<\/span><\/span><em><br \/>\n<\/em><\/p>\n<p>Dans l&#8217;exemple suivant 2 param\u00e8tres suppl\u00e9mentaires ont \u00e9t\u00e9 ajout\u00e9. Un pour la couleur, l&#8217;autre pour l&#8217;\u00e9chelle. On constate que le nom de la variable peut diff\u00e9rer dans la fonction <em>spaceInvader()<br \/>\n<\/em>Ce qui importe est l&#8217;ordre d&#8217;ex\u00e9cution et la coh\u00e9rence interne.<\/p>\n<pre>function setup(){\r\n\u00a0\u00a0 \u00a0createCanvas(800,600);\r\n\u00a0\u00a0 \u00a0stroke(0);\r\n\u00a0\u00a0 \u00a0noLoop();\r\n}\r\n\r\nfunction draw(){\r\n\u00a0 background(255);\r\n\u00a0\u00a0 \u00a0for (var x = 10; x &lt; width-150; x += 150) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for (var y = 10; y &lt; width-150; y += 100) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 var couleur = int(random(255));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 var echelle = random(0.25, 1.0);\r\n\u00a0\u00a0 \u00a0spaceInvader(x,y,couleur,echelle);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n}\r\n}\r\n\r\nfunction spaceInvader(x,y,c,s){\r\nfill(c);\r\nstroke(c);\r\n\u00a0\u00a0 \u00a0push();\r\n\u00a0\u00a0 \u00a0translate(x,y);\r\n\u00a0\u00a0 \u00a0scale(s);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(20,0,10,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(80,0,10,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(30,10,10,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(70,10,10,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(20,20,20,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(40,20,30,20);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(70,20,20,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(10,30,20,20);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(80,30,20,20);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(0,40,10,30);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(30,40,50,20);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(100,40,10,30);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(20,50,10,20);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(80,50,10,20);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(30,70,20,10);\r\n\u00a0 \u00a0\u00a0 \u00a0rect(60,70,20,10);\r\n\u00a0\u00a0 \u00a0pop();\r\n}<\/pre>\n<p>Exercice simple : cr\u00e9er un d\u00e9placement en x du <em>spaceInvader.<\/em><\/p>\n<blockquote data-secret=\"pn6xyw8gH7\" class=\"wp-embedded-content\"><p><a href=\"http:\/\/www.lyceelecorbusier.eu\/p5js\/?p=2171\">Zdenek Sykora<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" src=\"http:\/\/www.lyceelecorbusier.eu\/p5js\/?p=2171&#038;embed=true#?secret=pn6xyw8gH7\" data-secret=\"pn6xyw8gH7\" width=\"600\" height=\"338\" title=\"&laquo;&nbsp;Zdenek Sykora&nbsp;&raquo; &#8212; \" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=\/wp\/v2\/posts\/2141"}],"collection":[{"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2141"}],"version-history":[{"count":12,"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=\/wp\/v2\/posts\/2141\/revisions"}],"predecessor-version":[{"id":3231,"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=\/wp\/v2\/posts\/2141\/revisions\/3231"}],"wp:attachment":[{"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lyceelecorbusier.eu\/p5js\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}