ruggaraxe ruggaraxe

Jusper, Спасибо! По железу средней требовательности. Достаточно Intel Core i5 и 16 Гб ОЗУ и карту типа Geforce 1050. Это так, навскидку. Детально пока не замеряли.

Jusper Jusper

Девблог интересный. Статичный скриншоты очень доставляют.
Сильно игрушка сейчас требовательна к железу?

alexprey alexprey

Скриншоты великолепны!)

yo_serjio yo_serjio

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

Mariya Mariya

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

RedHelium RedHelium

Работаю над освещением и над игровым контроллером, скоро приступлю к разработке прототипа города. Пока некоторые наброски..

alexprey alexprey

О это что то вроде редактора зданий? Можно самостоятельно новые дома собирать?

yo_serjio yo_serjio

Jusper, yo_serjio, через воркшоп будет потом работать?
Пока что, работает перебросом текстового файла с городом, в теории должно и сообщением передаваться.

Jusper Jusper

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

yo_serjio yo_serjio

Jusper, подстроить дизайн домов под себя, если не нравится стандартный) можно же будет летать в чужие города, персонализайия в этом плане сыграет только на руку)

Jusper Jusper

Вернул тебе ссылку на ич, невалидная была.
Выглядит оч круто. Надо пощупать. А в чем смысл такого редактора в игре? Что можно будет делать?

Tartal Tartal

Попробовал воплотить злодея-пришельца (раса до сих пор без названия) для Exterminator'а в 3D, скетч которого я недавно показывал здесь:

EfReeZe EfReeZe

SINILIAN, привет, мультфильм "Планета сокровищ". Рекомендую :)

Mariya Mariya

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

Wings' might Wings' might

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

Следить за ежедневными изменениями: https://vk.com/wingsmight

Razz Razz

Сбегаем от контролёра
https://vk.com/iron_meat_game

SINILIAN SINILIAN

С приветом)) Что за мульт или фильмец?
(последний трек если что)

Mariya Mariya

Всем привет!
В мире Сырны появилось второе живое существо - лягушка!

Wings' might Wings' might

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

Логотип проекта 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, какие есть.