Долго, сложно и невыносимо интересно.
Долго, сложно и невыносимо интересно.
Но никто из них не доделывает до конца и не стремится объединяться
const me = {name: 'Alex', left: 0}...setInterval(() => update(), 1000)...window.addEventListener('keyup', () => me.left++)...requestAnimationFrame(() => draw())
const me = {name: 'Alex', left: 0}...setInterval(() => update(), 1000)...window.addEventListener('keyup', () => me.left++)...requestAnimationFrame(() => draw())
const me = {name: 'Alex', left: 0}...setInterval(() => update(), 1000)...window.addEventListener('keyup', () => me.left++)...requestAnimationFrame(() => draw())
const me = {name: 'Alex', left: 0}...setInterval(() => update(), 1000)...window.addEventListener('keyup', () => me.left++)...requestAnimationFrame(() => draw())
const me = {name: 'Alex', left: 0}...setInterval(() => update(), 1000)...window.addEventListener('keyup', () => me.left++)...requestAnimationFrame(() => draw())
Карты, персонажи, навыки, умения...
Это набор библиотек и утилит, для работы с картами
* а точнее — тайлы
const map = [[{...}, {...}, {...}, {...}, {...}, {...}],[{...}, {...}, {...}, {...}, {...}, {...}],[{...}, {...}, {...}, {...}, {...}, {...}],...]const tile = map[1][3]
Подробнее об этом в книге Game Programming Patterns
for (let i = 0; i < 9000; i++) {result.push(items[i])}
for (let y = 0; y < 9000; y++) {for (let x = 0; x < 9000; x++) {result.push(items[x][y])}}
mapGrid.forEach((x, y) => {result.push(itemsGrid.get(x, y))}
например в плоском массиве
[123, 343, 35, 0, 391 ... ]
или вообще в ArrayBuffer
[01001101010100110001010101010]
new Promise(resolve => {setTimeout(() => {// расчеты для анимацииrequestAnimationFrame(() => /* рисование */)resolve()})})
startAnimation().then(step).then(step).then(step).then(step).then(doAction).then(endAnimation)
AsyncSequence([startAnimation, [stepstep...doAction],endAnimation])
Они позволяют мыслить на новом уровне, решать все более сложные задачи, в коде читается бизнес-логика
const mapGrid = MapModel.gridconst activeHero = player.getSelectedHero()const mainTown = player.getMainTown()const path = AStar.getPath(mapGrid, activeHero, mainTown)
Лишь бы работало
// TODO: переписать на графы, когда будет времяwhile (hasChunks) { ... }// TODO: создать отдельные классы для этогоfunction Knight(id, name) { ... }// TODO: тут почему-то тормозитvar f = getFactorial(23423423)
const okButton = new Buttton(0, 10, 'Ok')okButton.addEventListener('click', () => { ... })const cancellButton = new Buttton(0, 10, 'Cancel')cancellButton.addEventListener('click', () => { ... })
const okButton = new Buttton({left: 0,top: 10,onClick: () => { ... }})const cancellButton = new Buttton({...})
[{id: 'okButton',options: {left: 0,top: 10,onClick: () => { ... }},},...]
<button id="okButton"left="0"top="10"onClick="{doSomething()}"/>
При сборке он собирается в JSON с предыдущего слайда
<group id="main" ... ><group id="header" ... ><text-block ... /><button ... /></group><group id="footer" ... ><any-component ... /><button ... /></group></group>
При сборке он собирается в JSON с предыдущего слайда