понедельник, 6 апреля 2015 г.

Чемпионат России по фристайлу 2015 

Юрий “yurembo” Язев 
независимый игродел

После того, как все спортивно-информационные ресурсы уже выдали статьи о прошедшем в прошлую субботу (04.04.2015) Чемпионате России по фристайлу в дисциплине индивидуальный могул, настало время мне упомянуть об этом событии. Это будет чисто оценка зрителя и гостя соревнований без каких-либо подробностей. Как шутит обо мне хорошая знакомая: спортивный журналист 80-го уровня :-). Это спортивное мероприятие не ограничилось одним указанным днем, просто, yurembo был только в субботу.

С 31-го марта по 6-е апреля на трассах фристайла СДЮСШОР «Огонёк», что в городе Чусовом Пермского края одновременно было проведено сразу два соревнования всероссийского масштаба: Финал Кубка России и Чемпионат России. 31-го марта был официальный день приезда, после чего начались дни спортивной борьбы: 1-го и 2-го апреля прошли соревнования в дисциплине акробатика, соответственно, Финального этапа Кубка России и Чемпионата России, затем, 2 дня были отданы на откуп индивидуального могула и последние два дня – параллельного могула.

Стоит упомянуть, что «Огонёк» до настоящего времени 10 лет не принимал соревнования такого уровня.

В день моего присутствия на «Огоньке» проходил Чемпионат в индивидуальном могуле. Сначала, как полагается, у мужчин был квалификационный заезд. В результате которого, из 40 участников в финал соревнований вышли 12 сильнейших спортсменов. Затем были определены 6 лидеров, которые, впоследствии, в суперфинале боролись за медали. Поскольку, женщин в могуле мало, среди них не было квалификации, они все автоматом участвовали в финале. Но в суперфинал из них попали только шестеро, продолжившие борьбу за места на пьедестале.

Присутствуя на соревнованиях, я снял видео, используя камеру смартфона, поэтому качество столь низкое.


Мне особенно понравилась организация соревнований. Для зрителей из города курсировал автобус. Рядом с могульной трассой были размещены буфеты. Между заездами зрителям не приходилось скучать, на пьедестале выступали артисты, развлекая публику. Считаю, что в результате подобных соревнований, и, что немаловажно, правильного проведения, вид спорта, по которому они проводятся, популяризируется.





В финале Кубка России в дисциплине акробатика у мужчин победителем стал Павел Кротов, а у женщин – Любовь Никитина. Чемпионат России немногим поменял карты: победителем среди женщин так же стала Любовь Никитина, а среди мужчин Илья Буров.



В индивидуальном могуле в соревнованиях финального этапа Кубка России по могулу у мужчин и женщин победителями стали, соответственно: титулованный чусовлянин – лидер сборной России по фристайлу Александр Смышляев и Марика Пертахия – фристайлистка из Красноярска. В Чемпионате страны - картина поменялась только на 50%, поскольку, среди мужчин победителем так же стал Александр Смышляев, однако, у женщин лидером стала спортсменка из Чусового – Регина Рахимова. Чемпионат России в параллельном могуле полностью повторил события: победителями стали Александр Смышляев и Регина Рахимова.








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

Под конец спортивного шоу, yurembo сфотографировался с чемпионкой России по санному спорту Татьяной Ивановой, которая была зрителем на соревнованиях по фристайлу.


пятница, 13 марта 2015 г.

Кунгурская ледяная пещера


Юрий «yurembo» Язев
независимый игродел


Проживая всю свою долгую и отчасти тяжелую жизнь в Пермском крае, до предыдущего уикенда автору так и не удавалось побывать в одной из главных природных достопримечательностей родного края – Кунгурской ледяной пещере, хотя она находится всего в 120 км от места, где он проживает. Кунгурская пещера – уникальный геологический памятник всероссийского значения находится возле города Кунгура с краю села Филипповка, образовалась (по мнение ученых) 10 – 12 тыс. лет назад на месте Великого Пермского моря. Пещера представляет собой подземный лабиринт со множеством проходов, комнат (гротов) и озер со сталагмитами и вечными льдами. Она широко известна в России и за ее пределами. Поэтому туда проводятся многочисленные экскурсии, на каждую из которых собираются большие группы зрителей.
В детстве, когда автор еще учился в школе, ему было некогда съездить на экскурсию, ибо, тренировки и занятия санным спортом определяли его досуг. Чуть позже было уже совсем не до пещер…
Подозреваю: находясь в альтернативной реальности, все бы для него так и осталось. Однако, очень неожиданно, ему на e-mail пришло письмо от коллеги - выпускающего редактора журнала «Хакер», куда yurembo время от времени пишет статьи. Выпускающим редактором Хакера является Ирина Чернова – чудаковатый, но довольно милый компьютерный гик. Она любит путешествовать по далеким и холодным уголкам России. В этот раз выбор девушки пал на Кунгурскую ледяную пещеру. Зная, что yurembo живет совсем рядом с этим уникальным местом, Ирина позвала его с собой.

рис. 1. yurembo (автор в Хакере) и Ирина Чернова (выпускающий редактор Хакера)

Кроме ледяной пещеры в Кунгуре есть другие интересные для любопытствующих заведения, например, краеведческий музей и музей купечества. Однако, самое неповторимое место – это, несомненно, ледяная пещера.
Прилегающая к ледяной пещере территория принадлежит туристическому комплексу «Сталагмит», поэтому эта местность оборудована для туристов, тут присутствуют различные кафе (отмечу, с очень странным графиком работы) и магазинчики, где можно приобрести сувениры. Кроме того, здесь есть парк «Стоянка Ермака», выстроенные из дерева музеи древней Руси, по легенде, ледяную пещеру впервые изведывал Ермак Тимофеевич во время похода к сибирским ханам. Также, по легенде, он делал стоянку в верхах реки Чусовой, и от этого мост через реку в городе Чусовом назван «Ермаковским». Да, в пермском крае все пронизано Ермаком, хорошо, что пещеру «Ермаковской» не назвали.
До пещеры легко добраться на городском транспорте Кунгура (как добраться до Кунгура я оставлю на усмотрение читателя), до комплекса «Сталагмит» ходит 9-й автобус. Еще там имеется гостиница. Поэтому, особо незаурядным личностям, которые опаздывают на все автобусы, можно остановиться там. Но, те, кто ищут приключений, могут поискать другой путь.
Из-за большого траффика желающих попасть на экскурсию, запись на нее производится заранее. При этом, можно попасть к моменту, когда в пещеру идет какая-либо организованная группа зрителей, например, школьники. К ним присоединиться не получиться, придется ждать следующей экскурсии, к счастью, они проводятся достаточно часто.
Над входом в пещеру размещена соответствующая надпись.

Рис 2. Вход в пещеру

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

Рис. 3. Напутствие экскурсовода

Наконец, зрителей запускают в систему гротов и связующих их туннелей.





Хотя протяженность изведенной части пещеры составляет 5,7 км, длина экскурсионного пути только 1,5 км и длительность пути 1 час 20 минут. Пройти прогулочным шагом такое расстояние можно быстрее, но следует принять во внимание остановки, во время которых все вокруг можно фотографировать. Остановки осуществляются почти в каждом гроте, и, пока люди снимают фото и видео, экскурсовод рассказывает об истории пещеры и данного грота, в частности. У каждого из них есть свое название, я не буду перечислять их, об этом можно узнать на официальном сайте пещеры в разделе «Гроты»: http://kungurcave.ru/description_grottoes_kungcave/ . Лишь отмечу, что каждое название отражает свойства данного грота, так, например, первый грот – Бриллиантовый – самый холодный, поэтому в нем повсюду находятся многолетние нетающие льды. Есть грот Хлебникова – назван в честь основателя пещерных экскурсий в России, который начал свое дело именно здесь – в Кунгуре.





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








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







Органные трубы – это, так называемые, отверстия, подымающиеся к поверхности, но не соединяющие пещеру с открытым воздухом, иначе бы они были завалены грунтом. Тем не менее, в них попадает влага, образуются капли, которые звонко ударяются о камни при падении. От чего трубы и получили свое название.
Находясь в пещере, необходимо быть предельно аккуратным. Хотя дорожки и тропы оборудованы и освещены, высокому человеку (выше 150 см), постоянно приходится следить за расположением головы и находиться в полусогнутом состоянии, проходя по туннелям между гротами. В последних, спокойно можно выпрямиться в полный рост.







Экскурсия завершается примерно в 500 м от входа, это если по прямой, не считая пещерного лабиринта, и выходит из проема в горе на высоте пары десятков метров. Для спуска оттуда оборудована витиеватая лестница.

среда, 25 февраля 2015 г.

Казуальные игры



Юрий "yurembo" Язев
независимый игродел


Сегодня осилил книгу по гейм-дизайну казуальных игр “Casual Game Design”. В частности, книги по игровому дизайну мне всегда тяжело даются, наверное, потому, что их пишут не программисты, поскольку среди гейм-дизайнеров мало программистов. При этом, если бы было иначе, то, скорее всего, это было бы хуже для индустрии в целом.

Поскольку, дизайн-документы надо писать творческим людям, не обремененным техническими деталями, т.е.: писателям-фантастам, историкам и др.

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

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

Итак, после скучного и однообразного введения, автор пишет об особенностях казуальных игр, сам, при этом, являясь их дизайнером, чем все же отличаются хардкорные и казуальные игры и люди, играющие в эти типы игр. Рассказывает о механизмах, которые являются основой казуальных игр, и, которые развлекают игроков. На примерах рассматривает, как реализован тот или иной механизм. Вот, эти разделы показались мне наиболее ценными в книге. Книга заканчивается рассмотрением социальных игр, то есть игр в соц. сетях. Так как, книга написана и издана давно - в 2010-м году, а тогда соц. игры только стали появляться, при этом, бума мобильных девайсов, кроме немногочисленных айфонов, еще не было, мобильные игры в книге почти не рассматриваются. Однако, что случилось в реальности? Буквально год спустя после выхода книги, после распространения Андройда (мать его), казуальные игры для мобилок стали самым распространенным видом игрового ПО. Но эта уже реальность, не затронутая в рассматриваемой книге...

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

Однако, в инди-команде, любой ее участник выполняет несколько ролей, и не исключено, что программист будет гейм-дизайнером. Это тема отдельного разговора; инди-команда - это, вообще, клёво.

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

Но, при этом, адское пекло, да, я же хардкорный металист, буду до усрачки отстаивать, чтобы из ближайшего граммофона доносился хэви метал: “Cum on feel the noize, girlz rock u boyz”, как-то так, короче.

суббота, 14 февраля 2015 г.

Огонёк 98


Now we’re gonna come back for a long-long time...

 О содержимом видеоматериала. Когда-то очень давно (для точности, это произошло в 1998-м году) тренер СДЮСШОР «Огонек» по санному спорту Язев Евгений Юрьевич (ну, я уже тогда был с ним знаком, потому что занимался санным спортом) снял несколько тренировок своих воспитанников на видеокамеру. Это тренировки зимней (специальной – ледовой) и летней (общей) подготовки.
За прошедшие годы до сего момента я не думал, что мой интерес к этому видео возрастет настолько, что я, отбросив все дела, решу сделать его монтаж и, в результате, попробую получить смотрибельную версию. Для стороннего человека смотреть на тренировки не очень-то интересно. Чтобы это изменить, надо оставить лишь динамику, смена действий, перемены активностей. Чтобы сделать видео еще лучше, надо добавить музыку. Оставаясь в рамках своих музыкальных предпочтений, я добавил рок-композиции, которые у всех на слуху. Это: “Its my life” Джона Бон Джови, “Blackout” – хит Scorpions, песня “Moscow Calling” группы Gorky Park, вновь ставшая популярна после включения в саундтрек популярного российского сериала (общение с людьми приносит новую информацию), и мною горячо любимая “Return to Fantasyby Uriah Heep, не так известна широкой общественности, как предыдущие, но при этом бесподобна.

В ролях: я сам (версия ‘98) и мои лучшие друзья из 90-х. 

вторник, 30 декабря 2014 г.

Туториал – Вращение объекта с помощью мыши в UE4




Юрий “yurembo” Язев

независимый игродел


Во многих играх (особенно в MMORPG) в главном меню есть экран «Создания персонажа», где игрок создает (настраивает) своего персонажа. Обычно (особенно в симуляторах техники) персонаж вращается по оси Y. Вдобавок, зажав над персонажем курсор, игрок может поворачивать персонажа в любую сторону.
Сегодня я расскажу о том, как сделать вращающийся в трехмерной сцене объект. Хотя в рассматриваемом примере объект вращается по оси Y, на основе полученных сведений вы легко можете организовать вращение по X или Z.
Следующее изображение показывает полную программу, служащую для вращения:



Постепенно начнем вгрызаться в программу. В отличие от предыдущих версий движка, Unreal Engine 4 вместо привычного скриптового языка содержит графический язык программирования, в котором программные конструкции строятся путем размещения и настройки взаимодействия блоков – функций. Я не буду здесь подробно рассматривать этот механизм визуального программирования, ибо туториал посвящен другой теме.
Во-первых, нам нужно событие щелчка мыши. Как вы знаете, в UE4 каждый объект имеет событие OnPressed. Однако мы программируем Level Blueprint. В нашем случае это удобно, поскольку, таким образом, мы можем получить доступ к любому объекту уровня с глобальной позиции. Тем не менее, в этом случае мы лишены события OnPressed мыши. Но мы легко можем его добавить. Для этого откроем настройки проект (Edit -> Project Settings), и в открывшемся окне щелчком по пункту Input (с левой стороны) откроем меню настройки управления (справа). Далее, щелчком по кнопке с плюсом рядом с пунктом Action Mapping добавим новое событие. Развернем образовавшийся список. Появится поле ввода для задания имени нового события. Введем MouseClick. Ниже текстового поля находится ниспадающий список, содержащий список всевозможных событий от устройств ввода.                 Нам необходимо развернуть список Mouse и выбрать в нем событие Left Mouse Button. В моем случае это выглядит так (следующее изображение):



Теперь мы можем вернуться в Level Blueprint и создать это новое событие, выбрав его из контекстного меню.



Как видно, этот блок содержит 2 вывода: один реагирует на нажатие (Pressed), а второй – на отпускание (Released) левой кнопки мыши. В данном случае нам нужен второй - Released. При таком развитие событий, где будет обрабатываться нажатие (Pressed)? Это событие должно происходить при нажатии на вращающемся объекте, а не на пустом месте сцены. Поэтому, после импортирования 3D-модели в движок, нам необходимо создать для нее Blueprint-класс. Однако, сперва надо просто создать Blueprint-класс – наследник от Actor. После его создания, двойным щелчком по объекту Blueprint откроем окно редактора объекта. Перейдем на вкладку Components, затем из Content Browser перетащим импортированную трехмерную модель в окно редактора на панель Components. Теперь, можно переименовать, как саму модель, так и Blueprint-класс. Также, в редакторе можно наложить на модель любые материалы. Далее перейдем на вкладку Graph, где, собственно, происходит весь процесс кодирования. Сначала нам надо добавить переменную булева типа. Назовем ее  canRotate, так как она разрешает или запрещает вращать объект. Эта переменная станет членом нашего нового класса. Далее, щелкните правой кнопкой мыши по свободному пространству графа и из контекстного меню выберите Event Actor on Clicked. Данное событие произойдет, когда пользователь нажмет кнопку мыши над нашим объектом. Теперь, перетащите переменную canRotate с панели на пространство графа. В результате, появится контекстное меню. Выберем из него пункт Set. Образуется новый блок, который позволяет установить переменной нужное значение. Галочкой отметим переменную canRotate и соединим этот блок с блоком события Event Actor on Clicked.



Обратите внимание, чтобы сделать переменную открытой (т.е. доступной для других Blueprint – классов) надо щелкнуть на закрытом глазе рядом с переменной на панели. В результате, он откроется, что будет означать доступность переменной. Теперь, мы снова можем вернуться в Level Blueprint. Добавим 2 переменные: delta типа float и tank – ссылка на только что созданный класс 3d объекта.



На этом графе у нас уже имеется один блок – событие InputAction MouseClick. Далее, от выхода Released перенесем нить для создания блока set canRotate. В этом блоке необходимо сбросить значение булевой переменной.



Взгляните, этот блок имеет свойство Target для того, чтобы указать движку переменную-член какого объекта мы хотим модифицировать. Помните, мы создали переменную, которая указывает на трехмерный объект из другого класса? Она называется tank. Перетащим ее с панели на граф. В появившемся меню выберем пункт Get. Свяжем Tank с Target. Теперь, нам надо узнать координаты позиции курсора мыши. Чтобы их получить сначала создадим Get Player Controller блок, он возвращает текущее пользовательское устройство ввода. Из выходного значения создадим блок Get Input Mouse Delta. Эта функция возвращает разность между последней и текущей позициями мыши. Это, как раз то, что нам нужно!



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



Сейчас, мы можем создать объект-вращатель (Rotator). Чтобы это сделать, нам надо воспользоваться функцией Make Rot, найдите его в контекстном меню. Свяжите результат умножения с входящим значением Yaw данной функции. После этого, свяжем выходной результат функции Make Rot с входом A функции Combine Rotators. Значением для второго входного параметра операции объединения (combine) должна быть текущая позиция объекта в 3d сцене. Чтобы ее получить, создайте функцию Get Actor Rotation из контекстного меню. Как и в прошлый раз, параметром target этой функции должен служить tank. Возвращаемое значение функции Combine Rotators является сформированный объект – вращатель, который может использоваться для вращения трехмерного объекта в 3d сцене. Таким образом, из контекстного меню нам надо создать новую функцию “Set Relative Rotation”. Ей нужен параметр target, которым, как вы знаете служит tank, если перетащить нить от tank к данному блоку, Blueprint автоматически добавит необходимое преобразование типов.



Сейчас, нам необходимо немного вернуться назад. Как видно “Set Relative Rotation” не получает управления. В таком случае, нам надо создать новое событие: Event Tick, оно срабатывает каждый тик. После возникновения события, контроль передается на условное выражение, в котором определяется значение переменной canRotate. Ели она равна true, тогда управление передается в функцию Set Relative Rotation. И, она поворачивает наш объект. Мы рассмотрели один путь выполнения нашей программы, когда объект поворачивается следом за курсором мыши.



Во втором пути выполнения программы, объект поворачивается, благодаря своей инерции. Когда пользователь отпускает кнопку мыши, скорость мыши (delta) сохраняется в переменной. И, объект поворачивается с этой скоростью. Но когда программа сохраняет скорость мыши (delta)? После выполнения функции Set Relative Rotation управление передается в условный оператор, где снова проверяется значение переменной canRotate, если оно равно истине, тогда программа изменяет значение переменной delta, которую мы объявили ранее.
Если условие после возникновения события Event tick ложно, тогда программа выполняет другую функцию Set Relative Rotation, которая получает другие параметры. В данном случае дельта берется из переменной delta.  Другие операции такие же: Make Rot, Combine Rotators, Get Actor Rotation и, в качестве, параметра target так же выступает tank.


Заметьте, переменная delta имеет начальное значение, что позволяет вращаться объекту сразу после запуска программы. Затем, пользователь может изменить скорость и направление вращения объекта.
Теперь, мы полностью рассмотрели программу вращения 3d объектов в 3d пространстве.

Если у вас возникли какие-то вопросы, задавайте их в комментариях.