You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/et/6-space-game/2-drawing-to-canvas/README.md

615 lines
26 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Kogu kosmose mängu osa 2: Joonista kangale kangelane ja koletised
```mermaid
journey
title Teie Canvas graafikuteekond
section Alus
Mõista Canvas API-d: 3: Student
Õpi koordinaatsüsteemi: 4: Student
Joonista põhilisi kujundeid: 4: Student
section Pildi töötlemine
Laadi mängu varad: 4: Student
Töötle asünkroonset laadimist: 5: Student
Paiguta sprite'id: 5: Student
section Mängu renderdamine
Loo mängu ekraan: 5: Student
Ehita formaadid: 5: Student
Optimeeri jõudlust: 4: Student
```
Canvas API on üks veebiarenduse võimsamaid vahendeid dünaamiliste, interaktiivsete graafikute loomiseks otse sinu brauseris. Selles tunnis muudame tühja HTML `<canvas>` elemendi mängumaailmaks täis kangelasi ja koletisi. Mõtle kangale kui oma digitaalsele kunstipaneelile, kus kood muutub nähtavaks.
Me ehitame edasi eelmistel tundidel õpitu peale ja nüüd sukeldume visuaalsetesse aspektidesse. Õpid kuidas laadida ja kuvada mängu sprite'e, paigutada elemente täpselt ning luua oma kosmosemängu visuaalne alus. See sillutab teed staatiliste veebilehtede ja dünaamiliste, interaktiivsete kogemuste vahel.
Selle tunni lõpuks on sul täielik mängustseen, kus kangelase laev on õigesse kohta paigutatud ja vaenlased rivistatud lahinguks valmis. Sa mõistad, kuidas tänapäevased mängud kuvavad graafikat brauserites ning omandad oskused luua oma interaktiivseid visuaalseid elamusi. Uurime canvas-graafikat ja toome sinu kosmosemängu ellu!
```mermaid
mindmap
root((Canvas Graafika))
Canvas Element
HTML5 Funktsioon
2D Kontekst
Koordinaatsüsteem
Pikslite Kontroll
Drawing Operations
Põhivormid
Teksti Joonistamine
Pildi Kuvamine
Raja Joonistamine
Asset Management
Pildi Laadimine
Asünkroonsed Operatsioonid
Vigade Käsitlemine
Tulemuslikkus
Game Rendering
Sprite Positsioneerimine
Formatsiooni Paigutus
Stseeni Koostis
Kaadri Uuendused
Visual Effects
Värvid & Stiilid
Transformatsioonid
Animatsioonid
Kihtimine
```
## Eel-loengu viktoriin
[Eel-loengu viktoriin](https://ff-quizzes.netlify.app/web/quiz/31)
## Canvas
Mis see `<canvas>` element täpsemalt on? See on HTML5 lahendus dünaamiliste graafikute ja animatsioonide loomiseks veebibrauserites. Erinevalt tavalistest staatilistest piltidest või videotest annab canvas sulle pikslitase kontrolli kõige üle, mis ekraanil kuvatakse. See teeb sellest ideaalse vahendi mängude, andmete visualiseerimise ja interaktiivse kunsti jaoks. Mõtle sellele kui programmeeritavale joonistuspinnale, kus JavaScript on su pintsel.
Vaikimisi näeb canvas-element välja nagu tühi, läbipaistev ristkülik sinu lehel. Kuid just siin peitub selle võimekus! Selle tegelik jõud avaldub, kui kasutad JavaScripti kujundite joonistamiseks, piltide laadimiseks, animatsioonide loomiseks ja asjade kasutajate tegevustele reageerimiseks. See on sarnane 1960ndatel Bell Labsis arvutigraafika pioneeri tööviisile, kus iga piksel tuli käsitsi programmeerida, et luua esimesed digitaalsed animatsioonid.
✅ Loe [Canvas API-st lähemalt](https://developer.mozilla.org/docs/Web/API/Canvas_API) MDN-is.
Tavaliselt deklareeritakse see nii, osana lehe body-st:
```html
<canvas id="myCanvas" width="200" height="100"></canvas>
```
**See kood teeb järgmist:**
- **Määrab** `id` atribuudi, et saaksid sellele konkreetsele canvas elemendile JavaScriptis viidata
- **Määrab** `width` pikslites, et kontrollida kanga laiust
- **Seab** `height` pikslites, et määrata kanga kõrgust
## Lihtsa geomeetria joonistamine
Nüüd kui tead, mis on canvas element, vaatame, kuidas seal joonistada! Canvas kasutab koordinaatsüsteemi, mis võib tunduda matemaatikast tuttav, kuid arvutigraafika jaoks on üks oluline erinõks.
Canvas kasutab ristkoordinaate koos x-telje (horisontaalne) ja y-telje (vertikaalne) asukoha määramiseks. Kuid põhiline erinevus on see, et erinevalt matemaatikast, kus koordinaatide alguspunkt (0,0) on tavaolemusena all vasakul, canvas'is on origin (0,0) üleval vasakul, kus x väärtused suurenevad paremale liikumisel ja y väärtused allapoole liikumisel. See lähtub varajastest arvutiekraanidest, kus elektronkiired skaneerisid pilti ülalt alla, muutes vasaku ülanurga loomulikuks alguspunktiks.
```mermaid
quadrantChart
title Lõuendi koordinaatsüsteem
x-axis Vasak --> Parem
y-axis Ülemine --> Alumine
quadrant-1 Kvadrant 1
quadrant-2 Kvadrant 2
quadrant-3 Kvadrant 3
quadrant-4 Kvadrant 4
Origin Point: [0.1, 0.1]
Hero Center: [0.5, 0.8]
Enemy Formation: [0.3, 0.2]
Power-up: [0.7, 0.6]
UI Elements: [0.9, 0.1]
```
![canvas'i võrk](../../../../translated_images/et/canvas_grid.5f209da785ded492.webp)
> Pilt pärit [MDN-ist](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes)
Canvas elemendi joonistamiseks järgid kolme sammuga protsessi, mis moodustab kõigi canvas graafika aluse. Kui seda mõned korrad teha, saab see loomuomaseks:
```mermaid
flowchart LR
A[HTML Canvas elemendi] --> B[Saada lõuendi viide]
B --> C[Saada 2D kontekst]
C --> D[Joonistamise operatsioonid]
D --> E[Joonista kujud]
D --> F[Joonista tekst]
D --> G[Joonista pildid]
D --> H[Rakenda stiilid]
E --> I[Renderda ekraanile]
F --> I
G --> I
H --> I
style A fill:#e1f5fe
style C fill:#e8f5e8
style I fill:#fff3e0
```
1. **Leia viide** oma canvas elemendile DOM-ist (nagu iga teise HTML elemendi puhul)
2. **Hangi 2D joonistamiskontekst** see pakub kõiki joonistamismeetodeid
3. **Alusta joonistamist!** Kasuta konteksti sisseehitatud meetodeid graafika loomiseks
Siin on koodinäide:
```javascript
// Samm 1: Hangi lõuendi element
const canvas = document.getElementById("myCanvas");
// Samm 2: Hangi 2D joonistamiskontekst
const ctx = canvas.getContext("2d");
// Samm 3: Sea täitevärv ja joonista ristkülik
ctx.fillStyle = 'red';
ctx.fillRect(0, 0, 200, 200); // x, y, laius, kõrgus
```
**Läheme selle läbi samm-sammult:**
- Me **võtame** canvas elemendi selle ID järgi ja salvestame muutuja sisse
- Me **saame** 2D joonistamiskonteksti see on meie joonistamisvahendite komplekt
- Me **määrame** värviks punase, kasutades `fillStyle` omadust
- Me **joonistame** ristküliku, mis algab punktist (0,0), on 200 pikslit lai ja kõrge
✅ Canvas API keskendub peamiselt 2D kujunditele, kuid veebis 3D elementide joonistamiseks võib kasutada [WebGL API-d](https://developer.mozilla.org/docs/Web/API/WebGL_API).
Canvas API abil võid joonistada väga palju erinevaid asju, näiteks:
- **Geomeetrilisi kujundeid**, nagu näiteks ristkülikuid, kuid ka palju muud.
- **Teksti**, mis võib olla mis tahes fonti ja värvi.
- **Pilte**, kus saad joonistada pilte .jpg või .png failidest.
✅ Proovi joonistada! Sa juba tead, kuidas joonistada ristkülikut, kas oskad joonistada ka ringi? Vaata huvitavaid Canvas joonistusi CodePen'is. Siin on [eriti muljetavaldav näide](https://codepen.io/dissimulate/pen/KrAwx).
### 🔄 **Õppekontroll**
**Canvas'i alused**: Enne piltide laadimisse minekut veendu, et saad:
- ✅ Selgitada, kuidas canvas'i koordinaatsüsteem erineb matemaatilistest koordinaatidest
- ✅ Mõista kolmeastmelist protsessi canvas joonistamise operatsioonides
- ✅ Teada, mida 2D joonistamiskontekst pakub
- ✅ Kirjeldada, kuidas `fillStyle` ja `fillRect` töötavad koos
**Kiire enesetest**: Kuidas joonistaksid sinise ringi positsioonil (100, 50) raadiusega 25?
```javascript
ctx.fillStyle = 'blue';
ctx.beginPath();
ctx.arc(100, 50, 25, 0, 2 * Math.PI);
ctx.fill();
```
**Canvas joonistamismeetodid, mida nüüd tead:**
- **fillRect()**: Joonistab täidetud ristkülikuid
- **fillStyle**: Määrab värvid ja mustrid
- **beginPath()**: Alustab uut joonistusrada
- **arc()**: Loob ringe ja kaareid
## Laadi ja joonista pildiressurss
Põhikujundite joonistamine on hea algus, kuid enamik mänge vajab tegelikke pilte! Sprite'id, taustad ja tekstuurid annavad mängule visuaalse atraktiivsuse. Piltide laadimine ja kuvamine canvas'e'il on natuke erinev kujundite joonistamisest, kuid kui protsessi mõista, on see üsna lihtne.
Me peame looma `Image` objekti, laadima pildifaili (see toimub asünkroonselt ehk "taustal") ja siis joonistama selle canvas'ile, kui see on valmis. See lähenemine tagab, et pildid kuvatakse korrektselt ega blokeeri sinu rakendust laadimise ajal.
```mermaid
sequenceDiagram
participant JS as JavaScript
participant Img as Pildi objekt
participant Server as Failiserver
participant Canvas as Lõuendi kontekst
JS->>Img: new Image()
JS->>Img: Määra src omadus
Img->>Server: Palu pildifaili
Server->>Img: Tagasta pildidata
Img->>JS: Käivita onload sündmus
JS->>Canvas: drawImage(img, x, y)
Canvas->>Canvas: Joonista ekraanile
Note over JS,Canvas: Asünkroonne laadimine takistab kasutajaliidese blokeerimist
```
### Pildi põhilaadimine
```javascript
const img = new Image();
img.src = 'path/to/my/image.png';
img.onload = () => {
// Pilt on laaditud ja valmis kasutamiseks
console.log('Image loaded successfully!');
};
```
**Selles koodis toimub:**
- Loome uue Image objekti, mis hoiab sprite'i või tekstuuri
- Määrame, millist pildifaili laadida, seades allika tee
- Kuulame laadimise sündmust, et teaksime, millal pilt on kasutuskõlblik
### Parem viis piltide laadimiseks
Siin on tugevam viis piltide laadimise käsitlemiseks, mida tavapäraselt kasutavad professionaalsed arendajad. Pakime piltide laadimise Promise-põhisesse funktsiooni see, mis populaarsust kogus koos JavaScripti Promise'idega ES6 standardis , teeb sinu koodi organiseeritumaks ja vigade haldamise sujuvamaks:
```javascript
function loadAsset(path) {
return new Promise((resolve, reject) => {
const img = new Image();
img.src = path;
img.onload = () => {
resolve(img);
};
img.onerror = () => {
reject(new Error(`Failed to load image: ${path}`));
};
});
}
// Kaasaegne kasutus async/await abil
async function initializeGame() {
try {
const heroImg = await loadAsset('hero.png');
const monsterImg = await loadAsset('monster.png');
// Pildid on nüüd kasutusvalmis
} catch (error) {
console.error('Failed to load game assets:', error);
}
}
```
**Mida siin tegime:**
- Pakisime kogu piltide laadimise loogika Promise'i sisse, et seda paremini hallata
- Lisame vigade haldamise, mis tegelikult teavitab meid probleemidest
- Kasutasime tänapäevast async/await süntaksit, mis on palju loetavam
- Lisasime try/catch plokid, et laadimishäireid sõbralikult käsitleda
Kui pildid on laetud, on nende canvas'ile joonistamine üsna lihtne:
```javascript
async function renderGameScreen() {
try {
// Laadi mängu varad
const heroImg = await loadAsset('hero.png');
const monsterImg = await loadAsset('monster.png');
// Saa kanga ja kontekst
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
// Joonista pildid kindlatele positsioonidele
ctx.drawImage(heroImg, canvas.width / 2, canvas.height / 2);
ctx.drawImage(monsterImg, 0, 0);
} catch (error) {
console.error('Failed to render game screen:', error);
}
}
```
**Käime selle samm-sammult läbi:**
- Laeme kangelase ja koletise pildid taustal, kasutades await'i
- Võtame canvas elemendi ja hankime 2D joonistamiskonteksti
- Paigutame kangelase pildi kenasti keskele, kasutades lihtsaid koordinaatide arvutusi
- Paneme koletise pildi algusesse vasakule, et alustada vaenlaste formaati
- Püüame kinni kõik laadimise või joonistamise vead
```mermaid
flowchart TD
A[Laadi varad] --> B{Kas kõik pildid on laaditud?}
B -->|Ei| C[Näita laadimist]
B -->|Jah| D[Saa lõuendi kontekst]
C --> B
D --> E[Tühjenda ekraan]
E --> F[Joonista taust]
F --> G[Joonista vaenlase vormatsioon]
G --> H[Joonista kangelase laev]
H --> I[Kasuta visuaalseid efekte]
I --> J[Renderda kaader]
subgraph "Renderdamise torujuhe"
K[Varade haldamine]
L[Stseeni koostamine]
M[Joonistamise toimingud]
N[Kaadri väljund]
end
style A fill:#e1f5fe
style J fill:#e8f5e8
style I fill:#fff3e0
```
## Nüüd on aeg alustada oma mängu ehitamist
Nüüd paneme kõik osad kokku, et luua sinu kosmosemängu visuaalne alus. Sul on tugev arusaam canvas'i alustest ja piltide laadimise tehnikatest, seega juhib see praktiline osa sind läbi terve mänguekraani ehitamise õigesti paigutatud sprite'idega.
### Mida ehitada
Ehitad veebilehe Canvas elemendiga. See kuvab musta taustaga ekraani mõõtmetega `1024*768`. Me oleme varustanud sind kahe pildiga:
- Kangelase laev
![Hero ship](../../../../translated_images/et/player.dd24c1afa8c71e9b.webp)
- 5×5 koletise laev
![Monster ship](../../../../translated_images/et/enemyShip.5df2a822c16650c2.webp)
### Soovitatud arengusammud
Leia starter-failid kaustast `your-work`. Sinu projekti struktuur peaks sisaldama:
```bash
your-work/
├── assets/
│ ├── enemyShip.png
│ └── player.png
├── index.html
├── app.js
└── package.json
```
**See on sinu töövahend:**
- **Mängu sprite'id** asuvad kaustas `assets/`, et kõik oleks organiseeritud
- **Sinu põhiline HTML fail** seab üles canvas elemendi ja valmistab kõik ette
- **JavaScripti fail**, kuhu kirjutad kogu oma mängu joonistamiskoodi
- **package.json**, mis seab sisse arendusserveri, et saaksid lokaalselt testida
Ava see kaust Visual Studio Code'is ja alusta arendamist. Sul on vaja kohalikku arenduskeskkonda koos Visual Studio Code, NPM ja Node.js installeeritud. Kui sul pole `npm` arvutisse seadistatud, siis [vaata siit, kuidas seda installida](https://www.npmjs.com/get-npm).
Alusta oma arendusserverit, navigeerides kausta `your-work`:
```bash
cd your-work
npm start
```
**See käsk teeb päris toredaid asju:**
- **Käivitab** lokaalse serveri aadressil `http://localhost:5000`, et saaksid oma mängu testida
- **Serveerib** kõik failid korralikult, nii et brauser suudab neid laadida
- **Jälgib** faile muutuste osas, et su arendus sujuks mugavalt
- **Annan** sulle professionaalse arenduskeskkonna kõigi testide jaoks
> 💡 **Märkus**: Alguses näed brauseris tühja lehte see ongi ootuspärane! Kõigele koodi lisades värskenda lehte, et näha muutusi. See iteratiivne arendus annab sulle võimaluse nagu NASA Apollo juhitarkvara katsetada iga komponent enne suuremasse süsteemi integreerimist.
### Lisa kood
Lisa vajalik kood faili `your-work/app.js`, et täita järgmised ülesanded:
1. **Joonista musta taustaga canvas**
> 💡 **Kuidas teha**: Otsi /app.js faili TODO kommentaari ja lisa kaks rida. Sea `ctx.fillStyle` mustaks, seejärel kasuta `ctx.fillRect()` alguspunktiga (0,0) ja oma canvas'i mõõtmetega. Lihtne!
2. **Laadi mängu tekstuurid**
> 💡 **Kuidas teha**: Kasuta `await loadAsset()` oma mängija ja vaenlase piltide laadimiseks. Salvesta need muutujatesse, et hiljem joonistada. Pane tähele pildid ise ei kuvata enne, kui neid joonistad!
3. **Joonista kangelase laev keskmise alumise positsiooni peale**
> 💡 **Kuidas teha**: Kasuta `ctx.drawImage()` kangelase pildi paigutamiseks. X-koordinaadil proovi `canvas.width / 2 - 45`, et see oleks keskendatud, ja Y-koordinaadil `canvas.height - canvas.height / 4`, et asetada see alumisse ossa.
4. **Joonista 5×5 vaenlaste formaati**
> 💡 **Kuidas teha**: Otsi funktsioon `createEnemies` ja kirjuta sinna pesastatud tsüklid. Pead tegema natuke matemaatikat ruumi ja positsiooni arvutamiseks, kuid ära muretse ma näitan täpselt, kuidas!
Alustuseks määra konstandid korrektse vaenlaste rivistuse paigutamiseks:
```javascript
const ENEMY_TOTAL = 5;
const ENEMY_SPACING = 98;
const FORMATION_WIDTH = ENEMY_TOTAL * ENEMY_SPACING;
const START_X = (canvas.width - FORMATION_WIDTH) / 2;
const STOP_X = START_X + FORMATION_WIDTH;
```
**Selgitus, mida need konstandid teevad:**
- Määrame 5 vaenlast reas ja veerus (kena 5×5 ruudustik)
- Määrame, kui palju ruumi vaenlaste vahel on, et nad poleks liiga kokku surutud
- Arvutame, kui lai kogu formaad on
- Leiame, kust alustada ja kus lõpetada, et formaat oleks kenasti keskel
```mermaid
flowchart LR
A["Lõuendi laius: 1024px"] --> B["Formatsioon laiusega: 490px"]
B --> C["Algus X: 267px"]
C --> D["Vaenlase vahe: 98px"]
subgraph "5x5 Vaenlase Formatsioon"
E["Rida 1: Y=0"]
F["Rida 2: Y=50"]
G["Rida 3: Y=100"]
H["Rida 4: Y=150"]
I["Rida 5: Y=200"]
end
subgraph "Veeru Vahe"
J["Vea 1: X=267"]
K["Vea 2: X=365"]
L["Vea 3: X=463"]
M["Vea 4: X=561"]
N["Vea 5: X=659"]
end
style A fill:#e1f5fe
style B fill:#e8f5e8
style C fill:#fff3e0
```
Seejärel loo pesastatud tsüklid, et joonistada vaenlaste formaadi:
```javascript
for (let x = START_X; x < STOP_X; x += ENEMY_SPACING) {
for (let y = 0; y < 50 * 5; y += 50) {
ctx.drawImage(enemyImg, x, y);
}
}
```
**See pesastatud tsükkel teeb järgmist:**
- Välimine tsükkel liigub vasakult paremale
- Sisemine tsükkel liigub ülevalt alla, luues korrapäraseid ridu
- Joonistame iga vaenlase sprite'i täpselt arvutatud x,y koordinaatidele
- Kõik on kenasti jaotatud ja organiseeritud professionaalse ilmega
### 🔄 **Õppekontroll**
**Mängu joonistamise meistriklass**: Kontrolli oma terviklikku arusaamist renderdussüsteemist:
- ✅ Kuidas asünkroonne piltide laadimine takistab UI blokeerimist mängu käivitamisel?
- ✅ Miks arvutame vaenlaste positsioonid konstantide abil, mitte ei hardkodeeri neid?
- ✅ Milline on 2D joonistamiskonteksti roll joonistamisoperatsioonides?
- ✅ Kuidas pesastatud tsüklid loovad korraldatud sprite'ide vormistusi?
**Jõudluse kaalutlused**: Sinu mäng demonstreerib nüüd:
- **Tõhusat ressursi laadimist**: Promise-põhine piltide haldus
- **Organiseeritud joonistamist**: Struktureeritud joonistamisoperatsioonid
- **Matemaatilist positsioneerimist**: Arvutatud sprite'i paigutus
- **Vigade haldamist**: Sujuvat vigade käsitlemist
**Visuaalse programmeerimise kontseptsioonid**: Oled õppinud:
- **Koordinaatsüsteemid**: Matemaatika teisendamine ekraaniasenditeks
- **Spritei haldamine**: Mängugraafika laadimine ja kuvamine
- **Formatsiooni algoritmid**: Matemaatilised mustrid organiseeritud paigutusteks
- **Asünkroonsed operatsioonid**: Moodne JavaScript sujuvaks kasutajakogemuseks
## Tulemus
Lõpetatud tulemus peaks välja nägema selline:
![Musta taustaga ekraan kangelase ja 5*5 monsterdega](../../../../translated_images/et/partI-solution.36c53b48c9ffae2a.webp)
## Lahendus
Proovi esmalt ise lahendada, kuid kui jääd hätta, vaata [lahendust](../../../../6-space-game/2-drawing-to-canvas/solution/app.js)
---
## GitHub Copilot Agenti Väljakutse 🚀
Kasuta Agendi režiimi, et täita järgmine väljakutse:
**Kirjeldus:** Täienda oma kosmosemängu lõuendit, lisades visuaalseid efekte ja interaktiivseid elemente Canvas API tehnikate abil, mida oled õppinud.
**Üleskutse:** Loo uus fail nimega `enhanced-canvas.html`, kus lõuendis kuvatakse animatsiooniga taustast säravad tähed, kangelase laeva pulsseeriv eluriba ja vaenlase laevad, mis aeglaselt allapoole liiguvad. Lisa JavaScripti kood, mis joonistab vilkuvaid tähti juhuslike positsioonide ja läbipaistvusega, rakendab eluriba, mis muudab värvi tervise taseme põhjal (roheline > kollane > punane), ja animeerib vaenlase laevade sujuva liikumise allapoole eri kiirustel.
Lisateave [agendi režiimi](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) kohta.
## 🚀 Väljakutse
Oled õppinud 2D-le suunatud Canvas API-ga joonistamist; vaata ka [WebGL API-d](https://developer.mozilla.org/docs/Web/API/WebGL_API) ja proovi joonistada 3D-objekti.
## Loengu Järgne Test
[Loengu järel test](https://ff-quizzes.netlify.app/web/quiz/32)
## Ülevaade & Iseõpe
Õpi Canvas API kohta rohkem, [lugedes selle kohta](https://developer.mozilla.org/docs/Web/API/Canvas_API).
### ⚡ **Mida saad teha järgmise 5 minutiga**
- [ ] Ava brauseri konsool ja loo lõuendi element käsuga `document.createElement('canvas')`
- [ ] Proovi joonistada ristkülikut `fillRect()` meetodiga lõuendi kontekstis
- [ ] Katseta erinevate värvidega, kasutades `fillStyle` omadust
- [ ] Joonista lihtne ring kasutades `arc()` meetodit
### 🎯 **Mida saad selle tunni jooksul saavutada**
- [ ] Täida loengu lõpu test ja saa aru lõuendi aluspõhimõtetest
- [ ] Loo lõuendi joonistusrakendus mitme kujundi ja värviga
- [ ] Rakenda piltide laadimist ja spriteide renderdamist oma mängus
- [ ] Ehita lihtne animatsioon, mis liigutab objekte lõuendil
- [ ] Harjuta lõuendi teisendusi nagu skaleerimine, pööramine ja nihutamine
### 📅 **Sinu nädala pikkune lõuendi teekond**
- [ ] Lõpeta kosmosemäng uhkete graafika ja sprite-animatsioonidega
- [ ] Õpi keerukaid lõuendi tehnikaid nagu gradientid, mustrid ja kompositsioon
- [ ] Loo interaktiivseid visualiseeringuid andmete esitamiseks lõuendil
- [ ] Õpi lõuendi optimeerimistehnikaid sujuvuse tagamiseks
- [ ] Ehita joonistus- või maalimisrakendus erinevate tööriistadega
- [ ] Uuri loomingulist kodeerimist ja generatiivset kunsti lõuendil
### 🌟 **Sinu kuu pikkune graafikateadmiste valdamine**
- [ ] Ehita keerukaid visuaalseid rakendusi Canvas 2D ja WebGL abil
- [ ] Õpi graafikaprogrammeerimise põhimõtteid ja shaderite aluseid
- [ ] Panusta avatud lähtekoodi graafikateekidesse ja visualiseerimistööriistadesse
- [ ] Valda jõudluse optimeerimist graafikamahukate rakenduste jaoks
- [ ] Loo hariduslikku materjali lõuendiprogrammeerimisest ja arvutigraafikast
- [ ] Saa graafikaprogrammeerimise eksperdiks, kes aitab teisi visuaalsete kogemuste loomisel
## 🎯 Sinu lõuendi graafikateadmiste meisterlikkuse ajaskaala
```mermaid
timeline
title Canvas API õppimise edenemine
section Canvas põhialused (15 minutit)
Põhitoimingud: Elemendi viide
: 2D konteksti ligipääs
: Koordinaatsüsteem
: Lihtsa kujundi joonistamine
section Joonistamistehnikad (20 minutit)
Graafika algelemendid: Ristkülikud ja ringid
: Värvid ja stiilid
: Teksti renderdamine
: Raja toimingud
section Pildi käsitlemine (25 minutit)
Varade haldamine: Pildiobjekti loomine
: Asünkroonne laadimise mustrid
: Vea käitlemine
: Tõhususe optimeerimine
section Mängugraafika (30 minutit)
Spriti renderdamine: Positsioneerimisalgoritmid
: Formatsiooni arvutused
: Stseeni koostamine
: Kaadri renderdamine
section Täiustatud tehnikad (40 minutit)
Visuaalsed efektid: Transformatsioonid
: Animatsioonid
: Kihistamine
: Oleku haldamine
section Tõhusus (35 minutit)
Optimeerimine: Tõhus joonistamine
: Mälu haldamine
: Kaadrisageduse kontroll
: Varade vahemällu salvestamine
section Professionaalsed oskused (1 nädal)
Tootmiskgraafika: WebGL integratsioon
: Canvas teegid
: Mängumootorid
: Platvormideülene kaalutlus
section Täiustatud graafika (1 kuu)
Spetsialiseeritud rakendused: Andmete visualiseerimine
: Interaktiivne kunst
: Reaalajas efektid
: 3D graafika
```
### 🛠️ Sinu lõuendi graafikatehnikate kokkuvõte
Pärast selle tunni lõpetamist oled omandanud:
- **Canvas API valdamine**: Täielik arusaamine 2D graafikaprogrammeerimisest
- **Koordinaatide matemaatika**: Täpsed positsioneerimis- ja paigutusalgoritmid
- **Varade haldus**: Professionaalne piltide laadimine ja vigade käsitlemine
- **Renderdus-pipeline**: Struktureeritud lähenemine stseenide koostamisele
- **Mängugraafika**: Spriteide positsioneerimine ja formatsioonide arvutamine
- **Asünkroonne programmeerimine**: Moodsad JavaScripti mustrid sujuvaks tööks
- **Visuaalne programmeerimine**: Matemaatika tõlkimine ekraanikujutisteks
**Reaalmaailma rakendused**: Sinu lõuendi oskused sobivad otse järgmiste jaoks:
- **Andmete visualiseerimine**: Graafikud, diagrammid ja interaktiivsed juhtpaneelid
- **Mänguarendus**: 2D-mängud, simulatsioonid ja interaktiivsed kogemused
- **Digitaalne kunst**: Loominguline kodeerimine ja generatiivsed kunstiprojektid
- **UI/UX disain**: Kohandatud graafika ja interaktiivsed elemendid
- **Haridustarkvara**: Visuaalsed õppimisvahendid ja simulatsioonid
- **Veebirakendused**: Dünaamilised graafikud ja reaalajas visualiseeringud
**Saadud professionaalsed oskused**: Nüüd oskad:
- **Ehita** kohandatud graafilahendusi ilma väliste teekideta
- **Optimeeri** renderdusjõudlust sujuva kasutajakogemuse tagamiseks
- **Debugi** keerulisi visuaalseid probleeme brauseri arendajatööriistadega
- **Disaini** skaleeritavaid graafikasüsteeme matemaatiliste põhimõtete alusel
- **Integreeri** Canvas graafikat kaasaegsete veebi-rakendusraamistikega
**Canvas API meetodid, mida valdad**:
- **Elemendi haldus**: getElementById, getContext
- **Joonistusoperatsioonid**: fillRect, drawImage, fillStyle
- **Varade laadimine**: Pildiobjektid, Promise-mustrid
- **Matemaatiline positsioneerimine**: Koordinaatarvutused, formaationalgoritmid
**Järgmine tase**: Oled valmis lisama animatsiooni, kasutajaliidest, kokkupõrke tuvastust või uurima 3D graafikat WebGL-iga!
🌟 **Saavutus omandatud**: Oled loonud täieliku mängu renderdamissüsteemi, kasutades Canvas API põhitehnikaid!
## Ülesanne
[Mängi Canvas API-ga](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Vastutusest loobumine**:
See dokument on tõlgitud tehisintellekti tõlketeenuse [Co-op Translator](https://github.com/Azure/co-op-translator) abil. Kuigi püüdleme täpsuse poole, palun arvestage, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument oma emakeeles tuleks lugeda autoriteetseks allikaks. Olulise info puhul on soovitatav kasutada professionaalse inimese tehtud tõlget. Me ei vastuta käesoleva tõlke kasutamisest tulenevate arusaamatuste ega valesti mõistmiste eest.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->