MDN рдкрд░, "2D рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреЗрдо" рдирд╛рдордХ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ рдЬреЛ HTML5 <рдХреИрдирд╡рд╛рд╕> рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рддрд▓рд╛рд╢рддрд╛ рд╣реИ ред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо Svelte рдкрд░ рдЗрд╕ рдЧреЗрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВрдЧреЗред
1. рдПрдХ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдирд╛
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рд╕реНрд╡реЗрд▓реЗрдЯ
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рддреАрди рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдХрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рд╡рд░реНрдЧ, рдПрдХ рдЖрдпрдд рдФрд░ рдПрдХ рдЪрдХреНрд░ред
рдбреЛрдо рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреИрдирд╡рд╛рд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдСрдирдорд╛рдЙрдВрдЯ рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд░рдЦрд╛ред рдЗрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдирд╡рд╛рд╕ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдХреИрдирд╡рд╕ рдПрд▓рд┐рдореЗрдВрдЯ рд╕реЗ рдмрд╛рдЗрдВрдб рдХрд░рдирд╛ ред
<script> import { onMount } from 'svelte'; let canvas; onMount(() => { const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.rect(20, 40, 50, 50); ctx.fillStyle = "#FF0000"; ctx.fill(); ctx.closePath(); ctx.beginPath(); ctx.arc(240, 160, 20, 0, Math.PI*2, false); ctx.fillStyle = "green"; ctx.fill(); ctx.closePath(); ctx.beginPath(); ctx.rect(160, 10, 100, 40); ctx.strokeStyle = "rgba(0, 0, 255, 0.5)"; ctx.stroke(); ctx.closePath(); }); </script> <canvas bind:this={canvas} width={480} height={320} ></canvas> <style> canvas { background: #eee; } </style>
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХреЗрд╡рд▓ onMount () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдмрд┐рдирд╛ рд╕рднреА рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ Svelte рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рджреА рдЬрд╛рддреА рд╣реИрдВред
2. рдЧреЗрдВрдж рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
3. рджреАрд╡рд╛рд░ рд╕реЗ рдЙрдЫрд╛рд▓
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
4. рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░реИрдХреЗрдЯ рдирд┐рдпрдВрддреНрд░рдг
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
рдПрдХ рд╡рд┐рд╢реЗрд╖ <svelte: рд╡рд┐рдВрдбреЛ> рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдХреАрдмреЛрд░реНрдб рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдФрд░ рдЙрдирдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдСрдирдорд╛рдЙрдВрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред
5. рдЦреЗрд▓ рдХрд╛ рдЕрдВрдд
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
6. рдИрдВрдЯреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
7. рдЯрдХрд░рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
8. рд╕реНрдХреЛрд░ рдФрд░ рдЬреАрдд
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
9. рдорд╛рдЙрд╕ рдирд┐рдпрдВрддреНрд░рдг
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
рдПрдХ рдорд╛рдЙрд╕ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдСрдирдорд╛рдЙрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
10. рдирд┐рд╖реНрдХрд░реНрд╖
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - Svelte
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рд╕рднреА рдХреЛрдб Svelte рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЦреЗрд▓ рдЖрдорддреМрд░ рдкрд░ рд╢реБрджреНрдз рдЬреЗрдПрд╕ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреИрдпрд╛рд░ HTML5 рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣реА рдЧреЗрдо рдЬреЛ рдлреЗрдЬрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк Svelte https://github.com/sveltejs/gl рдкрд░ WebGl рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ svelte-gl https://github.com/Rich-Harris/svelte-gl рдкрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрд┐рдЯрд╣рдм рднрдВрдбрд╛рд░
https://github.com/nomhoi/svelte-breakout-game
рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЧреЗрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛:
git clone git@github.com:nomhoi/svelte-breakout-game.git cd svelte-breakout-game npm install npm run dev
рд╣рдо рдкрддреЗ рдкрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ: http: // localhost: 5000 / ред