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

Разветвление программы

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

If else

If/elsе является базовым выражением для разветвления. Для примера возьмем предложение

Если будет идти дождь, я возьму зонтик.

Код, который отвечает этой фразе

if (bRaining)
{
    bUmbrella = true;
}

Обратите внимание, что просто указание логической переменной в скобках является аналогом bRaining == true. Чтобы срабатывало от обратного выражения, используйте bRaining == false или !bRaining.
Мы можем изменить выражение, добавив туда else

Если будет идти дождь, я возьму зонтик, иначе я надену рубашку с короткими рукавами.

Соответствующий код

if (bRaining)
{
    bUmbrella = true;
}
else
{
    bShortSleeves = true;
}

Для разветвления внутри разветвления можно использовать else if

Если будет идти дождь, я возьму зонтик, или если будет холодно, я надену свитер, иначе я надену рубашку с короткими рукавами.

Записывается это так

if (bRaining)
{
    bUmbrella = true;
}
else if (Temperature < ComfortableTemperature)
{
    bCoat = true;
}
else
{
    bShortSleeves = true;
}

Важно помнить, что как только одно из этих условий выполняется, то есть, сравнение Temperature < ComfortableTemperature не будет проводиться, если переменная bRaining будет равна true

For

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

for (m = 0; m < 3; m++)
{
     DoSomething(m);
}

Первая часть выражения в скобках обозначает начальное значение переменной m, вторая - условие, при котором программа выходит с цикла, третье - изменение переменной m. Наш пример обозначает, что функция DoSomething(m) будет выполняться до тех пор, пока m будет меньше 3, в нашем случае, 3 раза. Крайне не рекомендуется менять переменную m внутри цикла, так как это может повлиять на выполнение этого самого цикла. С другой стороны, считывать m, или использовать его в качестве параметров, можно сколько хочешь.

While

Этот цикл похож на for, но он просто повторяет кусок программы, пока выполняется условие. Соответственно, ни начальное значение, ни изменение переменной-счетчика (без которой можно и обойтись) в синтаксис не входит.

while (Int1 < 5)
{
    Int1++;
}

В скобках после while можно подставлять любое логическое выражение, используя хоть стринг, хоть целочисленные, хоть структуры, главное, чтобы на выходе было значение типа bool. К слову, ни в коем случае на забывайте добавить в цикл код, который будет обеспечивать выход программы из цикла (для вышеуказанного примера это Int1++), иначе при выполнении программа выдаст ошибку, да-да, зациклить UE3 не получится. Помимо прочего, для выхода из цикла можно использовать команду break. Например:

while (Int1 < 5)
{
    Int1++;
    if(Int1 == 3)
        break;
}

В таком случае, вместо того, чтобы досчитывать до 5, и тогда выходить с цикла, программа сделает это на значении 3. Другая полезная команда - continue. Вместо того, чтобы полностью выйти с цикла, она просто говорит программе пропустить код цикла, который следует после нее, и начать выполнять весь этот код заново. Для лучшего понимания пример:

while (Int1 < 5)
{
    Int1++;
    if(Int1 == 3)
        continue;
    DoSomething();
}

В этом случае, как только Int1 примет значение 3, команда DoSomething() пропускается, а цикл выполняет этот код заново, уже при Int1 равном 4.

Цикл while будет полезным, если вы не знаете точно, сколько раз вам придется выполнить действие, или это число будет меняться во время игры. И помните - цикл обязательно должен заканчиваться, иначе программа не будет работать корректно.

Do until

Полный аналог while, за исключением того, что условие стоит в конце цикла, а не в его начале, что значит, если может быть ситуация, когда while не выполнится ни разу, do until сначала выполнится, а уже потом посмотрит на условие. Само же условие обратное, то есть, если while перестает работать в тот момент, когда условие не соответствует действительности, то do until будет работать как раз пока условие не выполняется.

do
{
    Int1++;
} until (Int1 > 5);

Switch

Более продвинутая версия if/else. Выполняет определенный код для каждого определенного значения переменной.

switch(Int1)
{
    case 1:
        FirstDoSomething();
    case 2:
        SecondDoSomething();
    case 3:
        ThirdDoSomething();
    default:
        DefDoSomething();
}

Если переменная Int1 будет равна значению, указанному после case, весь код ниже будет исполняться, том числе, и код для других значений. То есть, для значения 2 выполнятся и SecondDoSomething(), и ThirdDoSomething(), и DefDoSomething(). Иногда это бывает полезно, но если это не то, что вам нужно, просто поставьте break перед каждым следующим casedefault, само собой; к слову, код после default будет выполняться, если наше значение не прошло ни в одном из указанных условий, в нашем случае, это может быть 0 или 4). Подмечу, что необязательно выделять скобками блок кода для каждого case.

Return

Эта команда похожа на break, только вместо выхода из цикла она выходит из функции. Например.

function TestFunction()
{
    if(Int1 == 5)
    { 
        DoSomething();
        return;
    }
    DoSomethingElse();
}

Тут, если значение будет равно 5, выполнится команда DoSomething(), после чего функция TestFunction перестанет выполняться, не добравшись до DoSomethingElse().

Goto

Эта команда будет переносить нас к определенной метке.

function TestFunction()
{
    RandomFucntion();

    goto EndOfFunction;

    DoSomething();

    EndOfFunction:
        DoSomethingElse();
}

Таким образом, после выполнения RandomFucntion(), мы сразу переходим к EndOfFunction и выполняем DoSomethingElse(), игнорируя DoSomething(). Не самая полезная команда, и обычно используется в комбинации с другими ответвляющими командами. И лучше не ставьте метки в коде выше, чем саму команду перехода, так как это, вероятней всего, опять приведет к зацикливанию программы.


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



оооо, goto, печально =)

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

Заметил несколько ошибок в while и одну недоговорку в do until. fxd

P.S. 81 просмотр, и никто не обратил внимания. Ай-яй-яй

Еще замечание, как и в C++, в конце каждого блока case, конструкции switch, обязательно нужен break, конечно, если для различных case не подразумевается одна и та же обработка.

Montaro,

Если переменная Int1 будет равна значению, указанному после case, весь код ниже будет исполняться, том числе, и код для других значений. То есть, для значения 2 выполнятся и SecondDoSomething(), и ThirdDoSomething(), и DefDoSomething(). Иногда это бывает полезно, но если это не то, что вам нужно, просто поставьте break перед каждым следующим case