new pixi guide
This commit is contained in:
parent
83605c7ee2
commit
d65f565451
184
content/posts/pixijs/01-getting-start-with-pixi.md
Normal file
184
content/posts/pixijs/01-getting-start-with-pixi.md
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
---
|
||||||
|
title: "Начало работы с Pixi.js"
|
||||||
|
date: 2022-08-10T23:08:03+03:00
|
||||||
|
draft: true
|
||||||
|
tags: [javascript, tutorial, gamedev]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Введение в Pixi.js
|
||||||
|
|
||||||
|
## О Pixi.js
|
||||||
|
...
|
||||||
|
|
||||||
|
## Краткое содержание
|
||||||
|
|
||||||
|
В данном руководстве, мы создадим каркас приложения, добавим изображение на сцену
|
||||||
|
и напишем цикл.
|
||||||
|
|
||||||
|
## Подключение библиотеки к HTML странице
|
||||||
|
|
||||||
|
В релизной версии желательно использовать конкретный релиз, который можно скачать
|
||||||
|
со страницы проекта на [GitHub](https://github.com/pixijs/pixijs/releases).
|
||||||
|
|
||||||
|
Можно использовать версию из CDN по следующей ссылке:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="https://pixijs.download/release/pixi.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
Но я буду использовать стабильный на момент написания руководства
|
||||||
|
[6.5.1](https://github.com/pixijs/pixijs/releases/tag/v6.5.1).
|
||||||
|
|
||||||
|
```sh
|
||||||
|
wget https://pixijs.download/v6.5.1/pixi.js
|
||||||
|
wget https://pixijs.download/v6.5.1/pixi.js.map
|
||||||
|
```
|
||||||
|
|
||||||
|
**Важно!** — скрипт необходимо разместить в теге `<head> .. </head>`.
|
||||||
|
|
||||||
|
## Создание приложения
|
||||||
|
|
||||||
|
После добавления скрипта на страницу можно перейти к написанию кода.
|
||||||
|
|
||||||
|
Добавим в наш скрипт код инициализации приложения.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let app = new PIXI.Application({ width: 640, height: 360 });
|
||||||
|
document.body.appendChild(app.view);
|
||||||
|
```
|
||||||
|
|
||||||
|
Здесь можно заметить, что размеры области рисования будут шириной **640** пикселей
|
||||||
|
и высотой **360** пикселей.
|
||||||
|
|
||||||
|
Класс `PIXI.Application` создаёт элемент `<canvas>`, в котором всё будет отображаться.
|
||||||
|
|
||||||
|
Строка `document.body.appendChild(app.view);` добавляем `<canvas>` в DOM веб-страницы.
|
||||||
|
|
||||||
|
# Создание спрайта
|
||||||
|
|
||||||
|
В Pixi.js существует несколько способов для рисования изображений на холсте
|
||||||
|
(_canvas далее и всегда будет назваться холстом_).
|
||||||
|
|
||||||
|
Спрайт – это тип [DisplayObject](https://pixijs.download/release/docs/PIXI.DisplayObject.html),
|
||||||
|
который оборачивает (_wraps_) загружаемое изображение, позволяя рисовать его,
|
||||||
|
масштабировать, поворачивать и ещё некоторые другие вещи.
|
||||||
|
|
||||||
|
Прежде чем отрисовывать изображение, его необходимо загрузить.
|
||||||
|
Загрузка изображений происходит асинхронно.
|
||||||
|
Вспомогательный метод в классе `PIXI.Sprite` загружает изображение самостоятельно.
|
||||||
|
|
||||||
|
Добавим код загрузки изображения.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Асинхронная загрузка изображения
|
||||||
|
let sprite = PIXI.Sprite.from('sample.png');
|
||||||
|
```
|
||||||
|
|
||||||
|
**sample.png** – можно скачать со страницы проекта,
|
||||||
|
по [прямой ссылке](https://pixijs.io/guides/static/images/sample.png).
|
||||||
|
|
||||||
|
## Добавление спрайта на сцену
|
||||||
|
|
||||||
|
Сцена — это просто контейнер.
|
||||||
|
Каждый дочерний элемент контейнера будет отображаться в каждом кадре.
|
||||||
|
|
||||||
|
Добавляя наш спрайт на сцену, мы сообщаем рендереру PixiJS, что хотим его нарисовать.
|
||||||
|
|
||||||
|
Добавить спрайт на сцену:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
app.stage.addChild(sprite);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Написание цикла обновления
|
||||||
|
|
||||||
|
PixiJS можно использовать и для статического контента,
|
||||||
|
но для большинства проектов потребуется добавить анимацию.
|
||||||
|
|
||||||
|
Наш пример на самом деле анимирован.
|
||||||
|
Он отображает один и тот же спрайт в одном и том же месте несколько раз в секунду.
|
||||||
|
|
||||||
|
Все, что нам нужно сделать, чтобы заставить изображение двигаться,
|
||||||
|
это обновлять его атрибуты один раз за кадр.
|
||||||
|
Чтобы сделать это, необходимо подключиться к тикеру приложения.
|
||||||
|
|
||||||
|
Ticker - это объект PixiJS, который запускает одну
|
||||||
|
или несколько callback функций в каждом кадре.
|
||||||
|
|
||||||
|
Добавим следующий код в наш скрипт:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Переменная для подсчёта секунд
|
||||||
|
let elapsed = 0.0;
|
||||||
|
|
||||||
|
// Говорим тикеру приложения запускать новый callback вызов каждый кадр,
|
||||||
|
// передавая количество времени, прошедшего с момента последнего тика
|
||||||
|
app.ticker.add((delta) => {
|
||||||
|
// добавляем это время к общему затраченному времени
|
||||||
|
elapsed += delta;
|
||||||
|
// Обновляем положение спрайта по оси X на основе косинуса нашего прошедшего времени.
|
||||||
|
// Делим на 50, чтобы немного замедлить анимацию
|
||||||
|
sprite.x = 100.0 + Math.cos(elapsed / 50.0) * 100.0;
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Все, что вам нужно сделать, это вызвать `app.ticker.add(...)`,
|
||||||
|
передать ему callback функцию, а затем обновить вашу сцену в этой функции.
|
||||||
|
|
||||||
|
Тикер будет вызываться каждый кадр, и мы сможем перемещать, поворачивать и все,
|
||||||
|
что захотим, чтобы анимировать проект.
|
||||||
|
|
||||||
|
## Полный листинг кода
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script src="https://pixijs.download/release/pixi.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
// Создаём приложение и добавляем его на страницу
|
||||||
|
let app = new PIXI.Application({ width: 640, height: 360 });
|
||||||
|
document.body.appendChild(app.view);
|
||||||
|
|
||||||
|
// Создаём спрайт и добавляем его на сцену
|
||||||
|
let sprite = PIXI.Sprite.from('sample.png');
|
||||||
|
app.stage.addChild(sprite);
|
||||||
|
|
||||||
|
// Добавляем ticker callback для перемещения спрайта туда-сюда
|
||||||
|
let elapsed = 0.0;
|
||||||
|
app.ticker.add((delta) => {
|
||||||
|
elapsed += delta;
|
||||||
|
sprite.x = 100.0 + Math.cos(elapsed/50.0) * 100.0;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
# Обзор архитектуры
|
||||||
|
|
||||||
|
PixiJS – это модульный движок рендеринга.
|
||||||
|
Каждая задача, необходимая для создания, обновления и отображения контента,
|
||||||
|
разбита на свой собственный компонент.
|
||||||
|
|
||||||
|
Это не только делает код более чистым, но и обеспечивает большую расширяемость.
|
||||||
|
Кроме того, с помощью инструмента [PixiJS Customize tool](https://pixijs.io/customize/)
|
||||||
|
можно создать пользовательский файл PixiJS, содержащий только подмножество функций,
|
||||||
|
необходимых вашему проекту, экономя размер загрузки.
|
||||||
|
|
||||||
|
Вот список основных компонентов, из которых состоит PixiJS.
|
||||||
|
Обратите внимание, что этот список не является исчерпывающим.
|
||||||
|
|
||||||
|
## Основные компоненты
|
||||||
|
|
||||||
|
| Компонент | Описание |
|
||||||
|
| -- | -- |
|
||||||
|
| Renderer `@pixi/core` | Ядром системы PixiJS является средство визуализации, которое выводит изображение на экран. Средство визуализации по умолчанию для PixiJS WebGL. |
|
||||||
|
| Container `@pixi/display` | Основной отображаемый объект, который содержит: дерево отображаемых объектов: спрайты, графика и текст. |
|
||||||
|
| Loader `@pixi/loader` | Система для асинхронной загрузки ресурсов, таких как изображения и аудиофайлы. |
|
||||||
|
| Ticker `@pixi/ticker` | Логика обновления игры, как правило, будет выполняться один раз за кадр. Вы можете использовать несколько тикеров одновременно. |
|
||||||
|
| Application `@pixi/app` | Представляет собой простой помощник, который объединяет загрузчик, тикер и средство визуализации в единый удобный простой в использовании объект. Отлично подходит для быстрого начала работы, создания прототипов и создания простых проектов. |
|
||||||
|
| Interaction `@pixi/interaction` | PixiJS поддерживает как сенсорное взаимодействие, так и взаимодействие с помощью мыши - делает объекты кликабельными, запускает события наведения курсора и т.д. |
|
||||||
|
| Accessibility `@pixi/accessibility` | Богатый набор инструментов для обеспечения доступа к клавиатуре и программе чтения с экрана. |
|
Loading…
Reference in New Issue
Block a user