, skabe en html5 lærred, fliser, der er puslespil,,,,, 16,,,,,,,,, 26,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, i denne forelæsning, vi vil arbejde med html5 lærred og javascript at skabe en dynamik, fliser, der er kamp.resultatet vil være en gåde, som arbejder med et bestemt image og er fleksibel vanskeligheder niveauer, der let kan justeres.,,,, det fuldstændige html5 lærred puslespil, her er et billede af det puslespil, vi vil bygge:,,, klik til at spille et par bemærkninger:,, cross - kompatibilitet:, dette spørgsmål blev testet, og arbejder i alle udgaver af safari, firefox, krom, som støtter, lærred. element.,, mobile: koden yder her arbejder i ovennævnte desktop - og er ikke optimeret til mobile.puslespillet vil belastning og gøre fint, men på grund af rør og trække opførsel i mobile browsere optimering, der skal til, for at det skal fungere korrekt.optimering af denne gåde for mobile vil blive behandlet i en kommende tutor., indstilles vanskeligheder - koden indeholder en konstant, puzzle_difficulty,,, der bestemmer antallet af stykker.i demo ovenfor, er den sat til 4, giver en firhjulstrækker puslespil.vi kan nemt skifte - f.eks. i denne udgave er en, puzzle_difficulty, af 10.,, begyndt at komme i gang, skabe en fortegnelse for projektet.et billede i registret, at du vil bruge din gåde.en web - venlige billede vil gøre, og det kan være enhver størrelse dit hjerte ønsker - sørg for det passer ind i folden af din browser vindue.,, trin 1: at skabe html skabelon, åbne et nyt dossier med din favorit tekst redaktør og redde det inde i dit projekt fortegnelse, næste til dit billede.næste, udfylde dette grundlæggende, html, model. <!doctype html > < html > < head > < afsnit > html5 puslespil < /afsnit > < manuskript > < /manuskript > < /head > < organ onload = "init();" > < lærred id = "eller" > < /lærred > < /organ > < /html > alt, hvad vi skal gøre her, er at skabe en standard, html5, model, der indeholder et, lærred. tag med, id, "eller".vi skriver en, onload, til at lytte til, et organ, et, som vil kalde vores, init(), funktion, da han blev skudt. nu begynder med, at din markør i, manuskript, tag.fra nu af, det er alt javascript. med undtagelse af den oprindelige variabler, vil jeg afholde de dele af funktion.først vise dig koden, og derefter forklare logikken. klar?lad os komme i gang!,, trin 2: oprettelse af vores variabler, lad os sætte vores variabler og se på hver enkelt., i denne puzzle_difficulty = 4; denne puzzle_hover_tint =⚬ « var _canvas, var _stage, var _img, var _pieces, var _puzzlewidth, var _puzzleheight, var _piecewidth, var _pieceheight, var _currentpiece og var _currentdroppiece, var _mouse;, har vi et par konstanter:, puzzle_difficulty, og puzzle_hover_tint,.det, puzzle_difficulty, konstant har antallet af skår i vores puslespil.i denne ansøgning, rækker og søjler altid kamp, ved at fastsætte, puzzle_difficulty,, 4, får vi 16 puslespil i alt.det øger øger vanskeligheden i puslespillet. næste er en række variabler:,, _canvas, og _stage, vil holde en henvisning til teltene, og dens udarbejdelse sammenhæng).vi gør det her, så vi ikke er nødt til at skrive det hele spørgsmål hver gang, vi bruger dem.og vi vil bruge dem.,, _img, vil være en henvisning til ladt billede, som vi vil kopiere pixels i anvendelse.,, _puzzlewidth,, _puzzleheight,, _piecewidth, og _pieceheight, vil blive anvendt til at opbevare dimensioner for såvel hele den gåde, og hver enkelt del af puslespillet.vi sætter disse én gang for at forhindre, at beregningen af dem igen og igen, hver gang vi har brug for dem, _currentpiece, er i besiddelse af en henvisning til det stykke i øjeblikket at blive slæbt.,, _currentdroppiece, indeholder en henvisning til det i øjeblikket i stand til at falde om.(i demo, dette stykke er fremhævet green.), _mouse, er en henvisning, der vil holde mus er aktuelle, x og y, holdning.det bliver opdateret, da puslespillet sammen at fastslå, hvilket stykke er berørt, og når et stykke bliver trukket at afgøre, hvad det er, der svæver over.,, og nu til vores funktioner.,, trin 3: den, init(), funktion, funktion init() {_img = nye image(); _img. addeventlistener ('load ", onimage, falske); _img.src =" mke jpg "), den første ting, vi ønsker at gøre i vores anvendelse er at lade billedet til puslespillet.billedet objekt er første instantierede og sætte vores, _img, variabel.det næste, vi lytter til, belastning, begivenhed, der vil så ild til vores, onimage(), funktion, når billedet er læsset.endelig mener vi, der er kilden til det billede, som udløser ladningen.,, trin 4: den, onimage(), funktion, funktion onimage (e) (_piecewidth = matematik. etage (_img.width /puzzle_difficulty) _pieceheight = matematik. etage (_img.height /puzzle_difficulty) _puzzlewidth = _piecewidth * puzzle_difficulty; _puzzleheight = _pieceheight * puzzle_difficulty; setcanvas(); initpuzzle();}, nu, at billedet er vellykket lastet, kan vi sætte de fleste variabler angivet tidligere.vi gør det her, fordi vi nu har oplysninger om image og kan sætte vores værdier på passende vis. den første ting, vi gør, er at beregne størrelsen af hver enkelt del af puslespillet.vi gør dette ved at dividere, puzzle_difficulty, værdi af bredde og højde af ladt image.vi har også trim fedtet af kanter for at give os nogle gode folk til at arbejde med og sikre, at hver enkelt kan passende swap "slots" med andre.næste bruger vi vores nye brikker værdier for at bestemme den samlede størrelse af det puslespil, og disse værdier, _puzzlewidth, og _puzzleheight,. endelig kræver vi af nogle funktioner, setcanvas(), og initpuzzle(),.,, løntrin 5:, setcanvas(), funktion, funktion setcanvas() {_canvas = dokument. getelementbyid ('canvas'); _stage = _canvas. getcontext ('2d '); _canvas.width = _puzzlewidth; _canvas.height = _puzzleheight; _canvas.style.border = "1px fast black"}, nu hvor vores puslespil værdier er fuldstændige, vi ønsker at opstille vores, lærred, element.vi sætter vores, _canvas, variabel til at henvise til vores lærred, element, og _stage, henvisning til dens sammenhæng. nu sætter vi den, bredde og højde, af vores lærred, svarende til størrelsen af vores klippede image, efterfulgt af anvendelsen af nogle enkle stil at skabe et sort ramme omkring vores lærred, til at vise grænserne for vores puslespil.,, trin 6: den, initpuzzle(), funktion, funktion initpuzzle() {_pieces = [...], _mouse = (x: 0, y: 0}; _currentpiece = ugyldig; _currentdroppiece = ugyldig; _stage. drawimage (_img, 0 0, _puzzlewidth, _puzzleheight, 0 0, _puzzlewidth, _puzzleheight); createtitle ("klik til at starte puslespil"); buildpieces();}, vi nulstille puslespil.vi sætter denne funktion på en sådan måde, at vi kan kalde det igen senere, når vi ønsker at se et puslespil.noget andet, som skulle fastsættes forud for spiller vil ikke være nødvendigt at fastsætte igen. vi først, _pieces, som en tom, system, og skabe det, _mouse, genstand, der vil holde vores mus holdning i ansøgningen.det næste sæt, _currentpiece, og _currentpiecedrop,,.,.(den første spiller disse værdier allerede ville være, nul, men vi vil sørge for, at de få nulstillet, da tænke på gåden.) endelig er det på tide at gøre!vi trækker hele billede viser den aktør, hvad de vil skabe.efter at vi skaber nogle simple instruktioner til vores, createtitle(), funktion, trin 7:, createtitle(), funktion, funktion createtitle (msg) (_stage.fillstyle = "# 000000" _stage.globalalpha = 4; _stage. fillrect (100, _puzzleheight - 40, _puzzlewidth - 200,40); _stage.fillstyle = "# ffffff" _stage.globalalpha = 1; _stage.textalign = "centrum". _stage.textbaseline = "mellem"; _stage.font = "20px arial" _stage. filltext (msg, _puzzlewidth /2, _puzzleheight - 20)}, her skaber vi et simpelt budskab, der pålægger brugerne klik puslespillet, vores budskab vil begynde. et delvist gennemskuelige rektangel, der vil tjene som baggrund for vores tekst.dette gør det muligt for brugeren at se det billede bag det, og også sikrer vores hvide tekst vil være læselige på et billede, vi bare, fillstyle, sort, og globalalpha,,. 4, før at udfylde et kort sort firkant i bunden af billedet. siden, globalalpha, påvirker hele lærredet skal vi sætte den tilbage til 1 (mat) før udarbejdelsen af teksten.at nedsætte vores afsnit, fastsatte vi den, textalign, »center og, textbaseline, til'middle ".vi kan også anvende en skrifttype, egenskaber. for at gøre den tekst, vi bruger, filltext() metode.vi går i msg, variable og stille det til den horisontale center for, lærred, og den lodrette center for det rektangel,.,, trin 8:, buildpieces(), funktion, funktion buildpieces() (var - jeg, var stykke, var xpos = 0, var ypos = 0 (i = 0 og jeg < puzzle_difficulty * puzzle_difficulty; jeg + +) (stykke = {}; piece.sx = xpos; piece.sy = ypos; _pieces. tryk (del); xpos + = _piecewidth; hvis (xpos > = _puzzlewidth) (xpos = 0, ypos + = _pieceheight;}} document.onmousedown = shufflepuzzle;), og endelig er det tid til at bygge den gåde!vi gør det ved at bygge en genstand for hvert stykke.disse ting vil ikke være ansvarlig for levering til gulvet, men blot at holde henvisninger, hvad at gøre, og hvor.når det er sagt, lad os gøre det. lad os deklarere et par variabler, som vi bliver genbrugt i løkken.vi ønsker at oprette det til iterate gennem antallet af puslespil, vi har brug for.vi får denne værdi ved at multiplicere, puzzle_difficulty, af sig selv - - så vi i dette tilfælde får 16. i loop: for (i = 0. jeg < puzzle_difficulty * puzzle_difficulty; jeg + +) (stykke = {}; piece.sx = xpos; piece.sy = ypos; _pieces. tryk (stk.); xpos + = _piecewidth; hvis (xpos > = _puzzlewidth) (xpos = 0, ypos + = _pieceheight;}}, begynde med at skabe et tomt stykke objekt.næste tilføje, sx og sy, egenskaber til formålet.i den første iteration. disse værdier er 0, og repræsenterer det punkt i vores billede, hvor vi vil begynde at trække fra.skub det til, _pieces [] system.dette mål vil også indeholde de egenskaber, xpos, og ypos,, og som vil give os de nuværende position i dette puslespil, hvor det bør fastlægges.vi bliver og genstande, før de skal kunne spille, så disse værdier, behøver ikke at være helt endnu. den sidste ting, vi skal gøre i hver sløjfe er at øge den lokale variabel, xpos, ved, _piecewidth,.før vi fortsætter med det, vi afgøre, om vi skal gå ned til den næste række i stykker ved at kontrollere, om, xpos, er mere end bredden af det puslespil.hvis vi gør xpos, tilbage til 0 og øge, ypos, ved, _pieceheight,. nu har vi vores puslespil alle gemt godt i vores _pieces, vifte.på dette tidspunkt er det kode endelig holder op med at udføre og venter for brugere.vi sætter et klik til at lytte til den, dokumentere, at fyre, shufflepuzzle(), funktion, når den udløses, der starter spillet.trin 9:,,, shufflepuzzle(), funktion, funktion shufflepuzzle() {_pieces = shufflearray (_pieces); _stage. clearrect (0,0, _puzzlewidth, _puzzleheight), var jeg, var stykke, var xpos = 0, var ypos = 0 (i = 0. jeg < _pieces. længde; jeg + +) (stykke = _pieces [i]; piece.xpos = xpos; piece.ypos = ypos; _stage. drawimage (_img, piece.sx, piece.sy, _piecewidth, _pieceheight, xpos, ypos, _piecewidth, _pieceheight); _stage. strokerect (xpos, ypos, _piecewidth, _pieceheight); xpos + = _piecewidth; hvis (xpos > = _puzzlewidth) (xpos = 0, ypos + = _pieceheight;}} document.onmousedown = onpuzzleclick;}, funktion shufflearray (o) (for (var - j, x, i = o.length; jeg; j = parseint (matematik. random() *), x = o [...] o [i] = o [j] o [j] = x); tilbage o;}, første ting først. - bland, _pieces [] system.jeg bruger en god nytte funktion her, der vil blande indeks for system gik ind i det.forklaringen på denne funktion er ikke emnet for denne forelæsning, så vi kan komme videre, idet vi ved, at vi med succes har forladt vores stykker.(for en grundlæggende indføring i og se dette tutor.), lad os først få grafik henledt på, lærred, for at trække vores stykker.næste, oprettede system svarende til, hvad vi gjorde, da først at skabe vores stykke objekter.i loop: for (i = 0. jeg < _pieces. længde; jeg + +) (stykke = _pieces [i]; piece.xpos = xpos; piece.ypos = ypos; _stage. drawimage (_img, piece.sx, piece.sy, _piecewidth, _pieceheight, xpos, ypos, _piecewidth, _pieceheight); _stage. strokerect (xpos, ypos, _piecewidth, _pieceheight); xpos + = _piecewidth; hvis (xpos > = _puzzlewidth) (xpos = 0, ypos + = _pieceheight;), først anvendelse den, jeg, variable at nedsætte vores henvisning til det nuværende stykke objekt i loop.nu skal vi forsyne, xpos, og ypos, egenskaber, jeg nævnte tidligere, hvilket vil være 0, i vores første iteration., nu trækker vi vores stykker.den første parameter, drawimage(), kilden til det billede, som vi ønsker at trække fra.så brug det stykke objekter sx og sy, egenskaber, sammen med, _piecewidth, og _pieceheight, at befolke de parametre, som erklærer området i det billede, som at trække fra.de sidste fire parametre angår, lærred, hvor vi ønsker at gøre.vi bruger den, xpos, og ypos, værdier, at vi begge er bygning i løkken og angivelse af genstanden. straks efter denne drager vi en hurtig slag omkring stykke for at give det en grænse, der adskiller det pænt fra andre stykker. nu venter vi på, at brugeren tag et stykke ved at fastsætte et klik, til at lytte.denne gang vil affyre en, onpuzzleclick(), funktion, trin 10:, onpuzzleclick(), funktion, funktion onpuzzleclick (e) (hvis (e.layerx