Перейти к содержанию

Выражения в Construct


Лучший контент GameSoul,

Рекомендуемые сообщения

  • BEST

Всем привет! Этот урок является моим переводом одного из разделов мануала Construct, с добавлением собственных/чужих комментариев. Если заметите какие-то ошибки в переводе, дайте мне знать. Вот ссылка на оригинал.

В Construct, выражения используются для вычислений или получения информации от объектов, например позицию спрайта по оси X. Вы будете часто сталкиваться с ними в процессе разработки ваших проектов, поэтому в данном уроке мы обсудим в общих чертах как их применять.

Все выражения вводятся в диалоговом окне параметров при добавлении или редактировании условия или действия, имеющего параметры:

event-example.png   parameters-dialog.png

Во время ввода символов в строке выражения показываются в виде подсказки. Вы можете написать его целиком вручную, либо выбрать из списка и сделать автозаполнение:

expressions-tip.png

При редактировании условия или действия вы можете вызвать словарь выражений, нажав на ссылку Find Expressions внизу окна. Он содержит все системные выражения и выражения всех объектов, доступных в вашем проекте:

expressions-dictionary.png

Ниже приведены некоторые примеры выражений, от простого  числа до сложных вычислений:

  • 0
  • random(360)
  • Sprite.X
  • (Player1.X + Player2.X) / 2
  • Sprite.8Direction.Speed
  • Sprite.X + cos(Sprite.Angle) * Sprite.Speed * dt

Выражения объектов

У объектов есть собственные выражения для получения информации о них. Они записываются в виде: имя объекта, точка, имя выражения (без пробелов). Например: Sprite.X - возвращает позицию объекта Sprite по оси X, а Sprite.Width - возвращает ширину объекта Sprite.

Если в условий/действии объекта Player, вы получаете выражения этого же объекта Player, то вместо названия объекта вы можете использовать Self. Выражение Self работает как ссылка на текущий объект. Например, в действии для объекта Player, Self.X будет ссылаться на выражение Player.X.

Вы можете добавить индекс объекта в выражение, чтобы получить значение выражения из разных копий объекта. Например, Monster(0).Angle вернет угол первой копии объекта Monster, а Monster(1).Angle вернет угол второй копии. Подробнее в мануале см. Index IDs (IIDs) в копиях объектов. Вы также можете прописать другое выражение в качестве индекса. Отрицательные числа начинаются с противоположного конца, поэтому Monster(-1).Angle вернет угол последнего объекта Monster.

Выражения поведений

Все выражения поведений (если они есть) присвоенных к объекту, тоже пишутся через точку и без пробелов (в виде: имя объекта, имя поведения, имя выражения). Например: Player.8Direction.Speed - возвращает скорость поведения 8Direction у объекта Player:

behavior-expressions.png

Системные выражения

Встроенные системные выражения вы можете посмотреть здесь. К ним относятся некоторые основные математические функции, такие как sqrt (квадратный корень).

Числа и текст (строки) в выражениях

Числа вводятся просто как цифры с необязательной дробной частью, разделенной точкой, напр: 5, -1.2.

Текст в выражениях должен быть окружён двойными кавычками, например "Привет!". Двойные кавычки это не часть текста, поэтому выражение "Привет" будет показано как Привет, без всяких двойных кавычек. Чтобы использовать двойные кавычки в тексте, необходимо поставить две двойных кавычки рядом друг с другом (""), напр: "Он сказал ""Привет"" мне" вернет Он сказал "привет" мне.

Вы можете использовать & (амперсанд) для построения строки из текста и цифр, напр: "Ваш счет: " & счет.

Чтобы добавить перенос строки (разрыв строки в строку), используйте системные выражение newline, напр: "Привет" & newline & "мир".

Операторы в выражениях

В выражениях вы можете использовать следующие операторы:

+ (прибавление)

- (вычитание)

* (умножение)

/ (деление)

% (модуль, остаток от деления)

^ (возведение в степень, напр: 5 ^ 2 = 25)

& (построение строки, напр: "Ваш счет: " & счет)

Также есть операторы сравнения =, <>, <, <=, >, >= для сравнивания значений (напр: счет < 10). Они возвращают 1, если сравнение истинно, или 0 если ложно.

При использовании с числами, & (амперсанд) также может быть использован как логическое "И", а | (вертикальный слэш) как логическое "ИЛИ". Если одна из сторон выражения является строкой, & (амперсанд) вместо этого делает конкатенацию строк. Эти символы полезны в сочетании с операторами сравнения, напр: счет < 0 | здоровье < 0, что вернет 1 если любое из условий истинно, иначе 0 если ложно.

?: это тернарный оператор, который позволяет проверять условия в выражениях. Он особенно полезен при использовании с операторами сравнения и логическими операторами. Он принимает форму условие ? результат_если_истинна : результат_если_ложно. Условие считается истинным, если оно не равно нулю, и ложно если равно нулю.

Например: здоровье < 0 | счёт < 0 ? "Игра окончена!" : "Продолжить!".

Распространенной ошибкой является запись выражений сравнения, таких как значение = 1 | 2 с намерением сопоставить значение к 1 или 2. Однако это так не работает, поскольку написанное выражение оценивается как (значение = 1) | 2, что всегда возвращает истину. Аналогично выражение значение = (1 | 2) не будет работать как 1 | 2, поэтому оно только проверяет, истинно ли значение. Правильный способ проверить это использовать значение = 1 | значение = 2.

Изменено пользователем GameSoul
  • Like 3
  • браво! 1
  • класс! 1
Ссылка на комментарий
Поделиться на другие сайты

в сети

hp_sample.png

Спойлер
(fullHp.Width * ((var2 * 100) / var1)) / 100

(fullHp.Width * (((var2 - enemy.dmg) * 100) / var1)) / 100

(fullHp.Width * (((var2 - (ceil(random((enemy.dmg - 11), (enemy.dmg + 10))))) * 100) / var1)) / 100

 

 

Изменено пользователем Sailer
Ссылка на комментарий
Поделиться на другие сайты

@Kanske чтобы вставить картинку на полный экран, без миниатюры, просто копируешь ссылку на картинку из вложения (открываешь её и копируешь), а потом вставляешь через кнопку

OFVuK.jpg

 

просто со сторонних хостингов картинки могут удалить! поэтому важные пикчи в уроках надо сохранять только через вложения

я переделал :ok:

 

Изменено пользователем Sailer
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
  • 3 недели спустя...
в сети
В 22.09.2021 в 19:38, Kanske сказал:

Вместо fullHp.Width надо писать ширину спрайта.

Короче, я видимо сам себя перехитрил, нет никакой ошибки, всё верно. Просто в моём примере вместо ширины в пихелях, я использовал подложку как константу фуллХП.

Я пожилой человек, такое случается=) Склероз, импотенция, деменция и необъяснимая тяга к извращениям. Будете в моём возрасте, поймёте=)

Имейте это ввиду когда будете читать мои гайды и поучительный цикл - СОВЕТЫ БОМЖА!

Изменено пользователем Kanske
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...