> For the complete documentation index, see [llms.txt](https://docs.allout.game/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.allout.game/all-out-docs/ru/nachalo-raboty/testing-and-publishing.md).

# Создание базовой игры

Чтобы помочь вам начать, это руководство проведёт вас через создание игры по сбору яблок!

### Сбор яблок

{% hint style="info" %}
В этой примерной игре некоторые детали лишь кратко упоминаются — они подробно рассматриваются в других руководствах. Если вам нужна помощь, проверьте левую боковую панель или воспользуйтесь поиском вверху, чтобы получить дополнительную информацию!
{% endhint %}

#### Создание карты

Сначала мы создадим простой мир с островом, по которому можно ходить, и яблоком, которое позже можно будет собрать!

1. Найдите Apple и Island в [Каталог ассетов](/all-out-docs/ru/ispolzovanie-redaktora/asset-catalog.md) и перетащите их в окно сцены вашей игры.

<figure><img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-acecdae4bfa75a93ca72c27b79de79fa55dbdb1c%2Fimage.png?alt=media" alt="Apple and island assets placed in the scene"><figcaption></figcaption></figure>

2. Этот остров довольно маленький! В [Инспектор](/all-out-docs/ru/ispolzovanie-redaktora/inspector.md) установите `Масштаб` на 10x10, чтобы сделать его больше

<figure><img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-c4ca715b0b60f8691738c5198f00d957c236775e%2Fimage.png?alt=media" alt="Island scale set in the Inspector"><figcaption></figcaption></figure>

3. Теперь остров подходящего размера, но яблоко находится за островом! Установите у острова `Слой` на -10, чтобы переместить его позади всего остального.

<figure><img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-126a998b78f427e923e730b4971f600cb124eb91%2Fimage.png?alt=media" alt="Island rendering layer set in the Inspector"><figcaption></figcaption></figure>

#### Добавление скриптов

В каталоге `scripts` вашего игрового проекта создайте новый файл с названием `pickup_apple.csl` и откройте его в текстовом редакторе или используйте [IDE на базе ИИ](/all-out-docs/ru/skripting/cursor-claude-antigravity-setup.md).

Вставьте следующий пример скрипта и сохраните файл:

```go
// Это создаёт компонент, который делает яблоко интерактивным,
// мы добавим его к Apple на следующем шаге руководства.
Pickup_Apple :: class : Interactable {
    is_picked_up: bool;

    ao_start :: method() {
        this.set_listener(this);
        this.set_text("Подобрать");
    }

    can_use :: method(player: Player) -> bool {
        if is_picked_up return false;
        return true;
    }

    on_interact :: method(player: Player) {
        if is_picked_up return;
        is_picked_up = true;

        // Запустить эффект подскакивания
        effect := new(Apple_Pop_Effect);
        entity.set_active_effect(effect);
    }
}

// Крутая анимация, когда ты его съедаешь :D
Apple_Pop_Effect :: class : Effect_Base {
    sprite: Sprite_Renderer;
    start_scale: v2;
    start_pos: v2;

    effect_start :: method() {
        sprite = entity.get_component(Sprite_Renderer);
        start_scale = entity.local_scale;
        start_pos = entity.local_position;
        set_duration(0.4);
    }

    effect_update :: method(dt: float) {
        t := get_elapsed_time() / 0.4;

        // Сначала увеличить, а затем быстро уменьшить до нуля
        scale_curve: float;
        if t < 0.3 {
            // Быстро подпрыгнуть (увеличить до 1.3x)
            scale_curve = lerp(1.0, 1.3, Ease.out_back(t / 0.3));
        } else {
            // Уменьшить до нуля
            scale_curve = lerp(1.3, 0.0, Ease.in_back((t - 0.3) / 0.7));
        }

        entity.set_local_scale(start_scale * scale_curve);

        // Немного подняться вверх
        rise := Ease.out_quad(t) * 0.5;
        entity.set_local_position({start_pos.x, start_pos.y + rise});

        // В конце плавно исчезнуть
        if sprite != null {
            alpha := 1.0 - Ease.in_quad(max(0.0, (t - 0.5) / 0.5));
            sprite.color.w = alpha;
        }
    }

    effect_end :: method(interrupt: bool) {
        entity.destroy();
    }
}
```

> Сохранение файла CSL автоматически обнаруживается и компилируется. Во время запущенного теста нажмите **Alt+F9** чтобы вручную выполнить горячую загрузку скомпилированных скриптов. Горячая загрузка сохраняет текущие значения глобальных переменных и полей существующих объектов, поэтому перезапустите, чтобы применить изменённый инициализатор. Для изменений сцены остановите и запустите снова. **Ctrl+R** перезагружает весь проект редактора и не требуется для обычной компиляции скриптов.

#### Добавление компонента Apple

Теперь, когда вы создали скрипт для яблока, нам нужно применить его к яблоку на сцене. Для этого мы добавим новый `Pickup_Apple` компонент из скрипта с помощью инспектора.

1. Выберите ваше Apple на сцене.
2. Нажмите кнопку «Add Component» в инспекторе.
3. Найдите компонент «Pickup\_Apple» и нажмите на него, чтобы добавить его к яблоку.

<figure><img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-40e3c8234f5c0af781a1c92e85748280e0aa8d97%2Fimage.png?alt=media" alt="Adding the Pickup Apple component in the Inspector"><figcaption></figcaption></figure>

Теперь вы увидите, что компонент добавлен к яблоку! Вы можете настроить некоторые поля Apple, изменив значения в инспекторе:

<figure><img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-04d42907e5796fe34eb094810c5666a4b4426d80%2Fimage.png?alt=media" alt="Pickup Apple component fields in the Inspector"><figcaption></figcaption></figure>

#### Запуск вашей игры

Когда будете готовы, нажмите на весёлый зелёный треугольник и попробуйте свою игру!

<figure><img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-e26510caa7307e5538830ed5ffd985a6ee920879%2Fimage.png?alt=media" alt="Apple collection game running in a local test"><figcaption></figcaption></figure>

### Следующие шаги

В следующих разделах вы узнаете, как тестировать игру с несколькими игроками, создавать собственные скрипты и строить мир своей мечты.

**Вот несколько задач, которые можно попробовать:**

* Сделайте много яблок, чтобы игрок мог их съесть
* Воспроизводите звуковые эффекты, когда яблоко съедено
* **Продвинутый уровень:** попробуйте написать скрипт, который будет снова создавать яблоки после того, как их съедят

\--

{% hint style="info" %}
ПРИМЕЧАНИЕ СБОКУ: Если ваш остров имеет низкое разрешение/пикселизирован, нажмите на png-ресурс острова в разделе «Assets» и установите Resample Multiplier на 1, затем нажмите Apply

<img src="https://2709175413-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzA8RGUKJ88fD0oXVALlz%2Fuploads%2Fgit-blob-d564ee004b2d5a196dd984b18137a8680b09c04c%2Fimage.png?alt=media" alt="Texture settings with Resample Multiplier set to 1" data-size="original">
{% endhint %}
