LogoPixi’VN
ПовествованиеПовествование с JS/TS

Меню выбора

Объясняет, как реализовывать и настраивать интерактивные меню выбора в Pixi’VN, позволяя игрокам принимать решения, влияющие на историю.

Экран UI

Пример экрана UI меню выбора можно найти в разделе примеры интерфейса.

ink

Этот метод можно использовать с синтаксисом ink. Подробнее здесь.

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

В Pixi’VN вы можете предложить игроку сделать выбор. Каждый выбор может либо запустить нарративный узел (label), либо закрыть меню выбора.

Требование к игроку сделать выбор

Чтобы потребовать от игрока сделать выбор, установите narration.choices в массив StoredChoiceInterface. Для создания объекта StoredChoiceInterface используйте:

content/labels/start.label.ts
import {
    newChoiceOption,
    newCloseChoiceOption,
    narration,
    newLabel,
} from "@drincs/pixi-vn";

export const startLabel = newLabel("start", [
    async () => {
        narration.dialogue = "Choose a fruit:";
        narration.choices = [
            newChoiceOption("Orange", orangeLabel, {}), // by default, the label will be called with "call"
            newChoiceOption("Banana", bananaLabel, {}, { type: "jump" }), 
            newChoiceOption(
                "Apple", 
                appleLabel, 
                { quantity: 5 }, 
                { type: "call" }, 
            ), 
            newCloseChoiceOption("Cancel"), 
        ]; 
    },
    () => {
        narration.dialogue = "Restart";
    },
    async (props) => await narration.jump("start", props),
]);

Получить

Чтобы получить текущее меню выбора, используйте narration.choices. Возвращает массив StoredChoiceInterface.

const menuOptions: StoredChoiceInterface[] = narration.choices;

Запрос

Чтобы выбрать вариант, используйте narration.selectChoice.

const item = narration.choices![0]; // get the first item

narration
    .selectChoice(item, {
        // Add StepLabelProps here
        navigate: navigate, // example
        // And the props to pass to the label
        ...item.props,
    })
    .then(() => {
        // ...
    })
    .catch((e) => {
        // ...
    });

Удалить

Чтобы очистить варианты выбора, установите narration.choices = undefined.

narration.choices = undefined;

Другие возможности

На этой странице