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

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

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

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

Справка