Construct Community

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Construct Community » Прочие уроки » Обзор некоторых выражений в CC r2.


Обзор некоторых выражений в CC r2.

Сообщений 1 страница 4 из 4

1

Доброго времени суток.
Довольно давно обещался сделать мини-обзоры на некоторые математические выражения, которые есть в программе CC. Теперь они будут лежать здесь. :)
В кавычках будет написано имя, данное самой программой, далее - их написание, немного комментариев и словесное описание событий.
Начнём.

"Absolute value" 

Код:
Abs (значение)

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

Код:
Always -> System: set global variable 'Global' to Abs (-100)

"Clamp value"

Код:
Clamp (Цель ограничения, минимальное значение, максимальное значение)

Ограничивает указанное значение. "Цель" никогда не упадёт ниже "минимального" и не поднимется выше "максимального" значения.
Пример. Имеется спрайт Bullet с этим поведением, постоянно ускоряется. Урезаем его возможности:

Код:
Always -> Bullet: Set speed to Clamp (Bullet[Bullet].Speed, 0, 800)

"Distance between points"

Код:
Distance (X1, Y1, X2, Y2)

Дистанция между задаными координатами. В пикселях.
Пример. Нужно узнать, каково же расстояние между спрайтами Герой и Sprite, и записать в объект Text. Создаём несложное событие:

Код:
Always  ->  Text: Set text to Distance (Герой.X, Герой.Y, Sprite.X, Sprite.Y)

"Convert value to Integer"

Код:
Int (значение)

Просто переведёт заданное значение в Integer - то есть превратит в целое число.
Это не обычное округление - это отсечение дробной части.
Допустим, нам нужна скорость физического объекта Sprite по оси X, целая. Для получателя я взял объект Text.

Код:
Always -> Text: Set Text to Int (Sprite[Physics].VelocityX)

"Generate random value"

Код:
Random (значение)

А вот тут всё действительно просто. Записываем значение - и система сгенерирует случайное число от 0 до заданного.
Приведу примером подсказку Arrmagedroid' а одному из новичков. Можно сделать 100%-ную вероятность с помощью Random, и делается это просто:

Код:
System - Compare -> Random (101) less than "вероятность в процентах"

"Get maximum value"

Код:
Max (значение1, значение2)

Максимальное значение. Сравнит два данных числа, и отдаст нам наибольшее из них.
Например, нужно определить, чей угол больше. Героя, или Sprite.

Код:
Always -> Text: Set text to Max(Герой.Angle, Sprite.Angle)

"Get minimum value"

Код:
min (значение1, значение2)

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

Код:
Always -> Text: Set text to Min(Герой.Angle, Sprite.Angle)

"Log"

Код:
Log (значение)

Логарифм. Покажет число, которое необходимо возвести в квадрат для получения введённого нами.
Спасибо, Sanches. :D
Но, у меня не получилось заставить его работать корректно. Оно, по моим предположениям, имеет неизвестное основание.

"Log10"

Код:
log10 (значение)

Логарифм, с основанием 10.
Если заданное число будет кратно 10, то нам покажут целое число, равное количеству нулей в значении.
Пример получения числа "2":

Код:
Always -> Text: Set Text to Log10 (100)

"Round"
Скажем, "минитема", так как это выражение имеет три вида.

Код:
Round (значение)

Обыкновенное округление.
Вам для сравнения: int(4,7) получит результат 4, round(4,7) - 5.
Приведу пример от Alltarboy, реализация движения "мышки" по сетке. Нужно дать спрайту поведение "Mouse", вместо моих чисел 64 вставить своё, желаемое, соответственно равное стороне клетки в пикселях.

Код:
Always -> Sprite: Set X to (round (Sprite.X/64)) * 64
                   Sprite: Set Y to (round (Sprite.Y/64)) * 64

"Round up"

Код:
Ceil (значение)

Округление в высшую сторону. Проще - всегда будет округлять до большего числа. Ещё проще, примером:
Имея round(1,001) получим 2.

"Round down"

Код:
Floor (значение)

Округление в низшую сторону. Противоположно предыдущему, так скажем.
Если задать объекту Text текст с round(1,999), то он выведет значение 1.

"Sqrt"

Код:
Sqrt (значение)

Квадратный корень из значения.
Sqrt(100) будет равен 10, Sqrt(169) = 13. Всё просто.

"Linear interpolatation"

Код:
Lerp (значение1, значение2, x)

Линейная интерполяция. Отлично подходит для плавного изменения значения от 1 к 2.
x - наша скорость, и должна удовлетворять условию: 0<=x<=1. Проще - от нуля до еденицы, либо быть равным им.
1 не советую, т.к. вы асболютно не заметите изменения - оно произойдёт почти мгновенно.
Пример использования сиё выражения:

Код:
Always -> Sprite: Set position ( Lerp (Sprite.X, Sprite2.X, 0,1), Lerp (Sprite.Y, Sprite2.Y, 0,1))

Вышеописанное позволит объекту Sprite плавно двигаться, пока он не достигнет Sprite2.
(спасибо Tr0yQ за его обзор...) Также, можно избавиться от влияния FPS на выражение:

Код:
Lerp (Sprite.X, Sprite2.X, 1-0.1^timedelta)

- или изменить 0.1 на большее, чтобы передвижение протекало медленней.

"Sin"

Код:
Sin (значение)

Синус. Значение принимается как угол, и выводится значение.

"Cos"

Код:
Cos (значение)

Косинус. Также, как и у Синуса, принимаются значения углов.

"Angle Difference"

Код:
AngleDiff (значение1, значение2)

Полезное выражение, недавно на него наткнулся.
Сравнит введёные значения (углы), и мы получим разницу между ними.
Таким образом, AngleDiff (360, 90) - выведет 270. Либо AngleDiff (90, 360) - разницы не будет.

"Angle between points"

Код:
angle(X1, Y1, X2, Y2)

Выяснит угол между двумя точками, координаты которых будут указаны.
angle (45, 45, 90, 90) - получит значение 90 градусов.

"Rotate Angle"

Код:
RotateAngle (начальное значение, конечное значение, количество шагов)

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

Код:
Start of Layout -> Sprite: Set angle to RotateAngle (0, 180, 180)

Если я правильно всё понял, вышеописанное событие развернёт спрайт на 180 градусов.

Если будут вопросы - задавайте. Опечатки - указывайте. Что-то совсем не понятно - сделаю простой пример.
Спасибо за внимание. Надеюсь, это было полезно хоть кому-то.

Отредактировано KaMiKaZa (2012-07-10 18:56:52)

2

KaMiKaZa, молотчик. :glasses:

3

KaMiKaZa написал(а):

System - Compare -> Random (101) equal to "вероятность в процентах"

Не equal to, а less than. Иначе вероятность будет всегда равна одному проценту.

4

ArmaggeDroid написал(а):

Не equal to, а less than. Иначе вероятность будет всегда равна одному проценту.

Ой, да. Подзабыл, довольно давно это же было....
Сейчас подправлю.

Yani-X написал(а):

KaMiKaZa, молотчик.

Спасибо.  :)


Вы здесь » Construct Community » Прочие уроки » Обзор некоторых выражений в CC r2.


создать свой форум бесплатно