DuCats Games DuCats Games

Трудимся над Мечеломом)
Обновляем локации. Добавили кучу новой травы и растений + немного эффектиков + горы! Теперь пейзажи стали гораздо красивее.

РОМАН РОМАН

Работаю над роботом пауком ходящем по стенам.
ВК: https://vk.com/co_of_co

ASH2 ASH2

Тестируем электрическую сеть.
ВК: https://vk.com/snail_ninja

Jusper Jusper

Tartal, + если это конкретно имплант (то есть чуваку вырвали кусок, поставили механизированный), то искажение органической части должно быть больше. Глянь фотки после косметических операций, когда щи распухшие и раскрашенные пуще некуда...

Tartal Tartal

Jusper, с первыми двумя моментами я всё понял и принял.
А вот с третьим немного не разобрался. Ты имеешь ввиду, что область вокруг глаза-импланта должна быть искажена и повреждена намного сильнее?

Jusper Jusper

Tartal,

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

...
Tartal Tartal

Потихоньку доделал концепт-портрет главного героя:

Jusper Jusper

Чем-то напомнило мне мотоциклы из Throne: Legacy, только обернутые в оформление харконеннов из Emperor: Battle for Dune.

Очень понравилась стилизация, местами то, как босс невозмутимо ходит по кругу, пока игрок по нему палит...

alexprey alexprey

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

alexprey alexprey

kirsakshlil, вспомнил, тоже в свое время пытался с этой штукой баловаться когда только обзавелся планшетом. Но дело дальше простых утилит не пошло)

kirsakshlil kirsakshlil

alexprey, мобильная среда разработки, использующая Java.

alexprey alexprey

kirsakshlil, милота) APDE это что такое, что то не слышал про такое..

kirsakshlil kirsakshlil

alexprey, о, ахах, я тоже как-то начинал делать что-то в этом духе, только в APDE. Ручная отрисовка GUI - та еще муть :с . Правда, работать прямо в телефоне не очень удобно. Зато весело, хех. По факту не более чем баловался...

ASH2 ASH2

Jusper, спасибо. Нет, просто "типичный портрет").

Jusper Jusper

И вот мне казалось, что мы все побороли и сможем перейти на 19.3, но началась так называемая кок-магия.
Много нативных вещей отвалилось (в том числе и легаси управление. новое не взлетело). И даже когда мы худо...

...
Jusper Jusper

ASH2,

Рисовка хорошая, я уже говорил ранее.

ASH2 ASH2

Когда личное пространство имеет значение.
ВК: https://vk.com/snail_ninja

alexprey alexprey

Освещение хорошо смотрится)

Логотип проекта Unreal Engine

Операторы

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

Стандартные операторы, "+", "-", "*" и "/", в большинстве случаев, работают на все типы данных, но на некоторые типы по разному. Обо всех нюансах, а также других операторах, я и расскажу в этой подстатье.

Стандартная арифметика

Наиболее проблемной в стандартной арифметике является комбинация float и int. Ясное дело, что при комбинациях этих типов переменных результат лучше всего делать именно float. Наиболее проблемной для подобных комбинаций является операция деления. Припустим, у нас есть выражение

Float2 = Int1 / Float1;

для значений

Int1=5
Float1=2.0

Тогда результат будет 2.5000. НО. Если выражение будет выглядеть как

Float1 = Int1 / Int2;

Для тех же

Int1=5
Int2=2

результат будет, как ни странно, 2.0000. Поэтому важно помнить, что сначала происходить именно операция деления, а уже потом присвоения, и, получается, Int1 / Int2 в результате дает тип int, верней, "2", и уже это число присваивается нашему Float1.

Полезными операторами являются инкремент (++) и декремент (--). Первое увеличивает значение переменной на 1, второе уменьшает. Записываются эти операторы подобным образом:

Int1++;

Таким образом, если применить такую операцию к, к примеру, Int1=5, то получим "6".

Как я уже упоминал раньше, пара векторов в сложении дает третий вектор, каждая компонента которого будет равна сложению соответственных компонент исходных векторов. То же касается и вычитания.

Процент

Если для деления нацело можно просто делить две переменные типа int, то для получения остатка от деления обычно используется значок процента, "%". Пример использования выражения.

IntResult = Int1 % Int2;

Для значений

Int1=28
Int2=5

IntResult в результате выдаст "3".

Не самый полезный оператор, но иногда помогает сэкономить немало строчек кода.

Сравнения

Сравнения - операторы, результатом которых является false или true. Применяться может к паре переменных разного типа. Элементарным примером является сравнение на равенство. Синтаксис подобного оператора

Variable1 == Variable2

В общем, если подобное выражение присвоить какой-то логической переменной, то, если Variable1 равна Variable2, переменная будет равна true, а если нет, то false. Обратите внимание, что равенство применимо и к стрингам (true, если одинаковы все литеры), и к структурам, например, векторам и ротаторам, в таком случае, сравниваться будут все компоненты структуры. В общем, список операторов сравнений почти такой же, как и в любом другом языке программирования

BoolVar = Int1 != Int2; \\выдаст true, если Int1 не равно Int2
BoolVar = Int1 < Int2; \\выдаст true, если Int1 меньше Int2
BoolVar = Int1 <= Int2; \\выдаст true, если Int1 меньше или равно Int2
BoolVar = Int1 > Int2; \\выдаст true, если Int1 больше Int2
BoolVar = Int1 >= Int2; \\выдаст true, если Int1 больше или равно Int2

Интересным оператором является "приблизительно равно". Применяется он к переменным типа float, и выдает true, если разница между переменными не превышает 0.0001. Бывает полезно, так как иногда программа не работает в связи с подобным крохотным несовпадением значений переменных. Синтаксис

BoolVar = Float1 ~= Float2; \\Если Float1=1, а Float2=1.00001, то выдаст true

Этот оператор применим и для стрингов, в этом случае он служит как невосприимчивое к регистру символов строки сравнение

BoolVar = String1 ~= String2; \\Выдаст true, если String1="SoMetThInG", а String2="something"

Логические операторы

Логическими являются операторы AND ("&&", "И"), OR ("||", "ИЛИ") и NOT ("!", "НЕ"). Чтобы понять их принцип действия, буду использовать фразы:

Если не будет идти дождь, и у нас будет достаточно денег...

Аналог в логических операторах (с заданными соответственными переменными)

!bRaining && CurrentMoney > RequiredMoney

Мы использовали операторы "И" и "НЕ". НЕ идет дождь И денег у нас > денег нужно. Если все переменные будут иметь соответственные значения, все выражение будет равно true.

Или другой пример.

Если будет вторник или четверг

Аналог в коде

Day == "Tuesday" || Day == "Thursday"

Если хотя бы одна из частей выражения будет true, такое же значение примет выражение, так как используется оператор ИЛИ. А если нет, то ясно, что false.

Обратите внимание на первый пример. Оказывается, чтобы сделать противоположное значение, нам достаточно, по аналогии с != просто поставить перед переменной восклицательный знак.

Также есть оператор EXCLUSIVE OR (взаимоисключающее ИЛИ, в народе просто XOR). Обозначается кавайным смайликом ^^.
Например выражение

Day == "Tuesday" ^^ Month == "January"

XOR будет выдавать true только в случае, если только одна часть выражения будет true. То есть, в нашем случае, для всех вторников, кроме вторника в январе, или для всех дней в январе кроме вторника.

"Склеивание"

"Склеивание" - наиболее подходящее слово для оператора, который "соединяет два стринга вместе". То есть, если вам нужно с двух переменных типа string сделать одну, то вам сюда.

Делается это с помощью одного из двух операторов - @ или $. Разница между ними - первое вставляет пробел между частями, другое - нет.

AtSign = String1 @ String2;
DollarSign = String1 $ String2;

Подобные знаки можно использовать в логе, так как, по сути, эта команда выводит стринг, попутно, превращая все элементы в тот же стринг.

'log("At sign:" @ AtSign);

Раз уж дело зашло о разных типах переменных, попробуйте ради практики проверить, будет ли выражение типа String1 @ Int1 превращено в стринг, лично я на практике не проверял, так что не уверен в результате))

Помимо прочего, при использовании оператора можно обойтись и без новой переменной, просто прикрепив вторую старую переменную к первой. Для такого используется следующий синтаксис

String1 @= String2;

Помимо прочего, это применимо к большинству других операторов, например

Int1 += Int2;

Etc.


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



Позабавил оператор ~=

alexprey, какой есть. Он, кстати, полезный при работе с высокоточными float, так как обидно бы было, если код не работает в связи с разницей в одну десятитысячную.

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

операторы конкатенации вообще зря такие сделали, имхо =)

Doc, а помойму удобно. Хотя лучше бы запили функцию форматирования

Doc, какие есть.

Справка