> 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="/files/50c503bae116695a3e99cd23b60f71d60c63dcf4" 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="/files/cc1b437b73797230f61aebbc14950dfc359b0239" alt="Island scale set in the Inspector"><figcaption></figcaption></figure>

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

<figure><img src="/files/a77a68ff840a0df95cdc0cd20d3f5b642961839b" 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="/files/04cae80cfc300e5a031f63d9c02158ece61e8ab0" alt="Adding the Pickup Apple component in the Inspector"><figcaption></figcaption></figure>

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

<figure><img src="/files/b145c06ab366957f19f423fe4f508a961e96d66b" alt="Pickup Apple component fields in the Inspector"><figcaption></figcaption></figure>

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

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

<figure><img src="/files/87df66c486c95bddd52fa907d2c6fc24dc988ef6" alt="Apple collection game running in a local test"><figcaption></figcaption></figure>

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

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

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

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

\--

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

<img src="/files/09dcb409059acdcbcbafa89619e21b04a99ef8a3" alt="Texture settings with Resample Multiplier set to 1" data-size="original">
{% endhint %}
