Маяк Анива
Маяк Анива - самая знаменитая заброшка Сахалина
The Ruins of Oak Park Academy in Nevada
Near the outskirts of Nevada, Iowa lies the ruins of Oak Park Academy, a boarding school built by the Seventh Day Adventist Church in 1911.
An hour-long drive through Iowa’s beautiful countryside brought me to the city of Nevada, Iowa. Along its southern edge lay the remains of Oak Park Academy, a high school-level coed boarding school operated by the Seventh Day Adventists of Iowa.
T. H. Jeys founded the school in 1902 under the name Iowa Industrial Academy. For the first year, classes were held for its inaugural class of 35 students in the rented Baldum Hotel in Stuart, Iowa. The following year, it moved to a piece of farmland on the eastern edge of the town. The name later changed to Stuart Academy.
In 1911 the school was renamed Oak Park Academy and moved to Nevada, Iowa, where it remained until its closure in the spring of 1980.
More Photos via Source:
https://abandonedway.com/2021/08/the-ruins-of-oak-park-acade...
Как подготовить машину к долгой поездке
Взять с собой побольше вкусняшек, запасное колесо и знак аварийной остановки. А что сделать еще — посмотрите в нашем чек-листе. Бонусом — маршруты для отдыха, которые можно проехать даже в плохую погоду.
Сюжетный бэд-трип
Вообще там должен был быть свободовец и куча "похмельных" шейдеров, но идеей хотелось поделиться уже сейчас.
Да, первый босс - эфемерный Каркарыч.
Холодное оружие в Abandoned Lands
Ублюдок, мать твою, а ну иди сюда, говно собачье, с дури решил ко мне лезть, ты, засранец вонючий, мать твою, а? Ну иди сюда, попробуй меня трахнуть, я тебя сам трахну, ублюдок, онанист чертов, будь ты проклят; иди, идиот, трахать тебя и всю твою семью, говно собачье, жлоб вонючий, дерьмо, сука, падла; иди сюда, мерзавец, негодяй, гад; иди сюда ты, говно, жопа!
Инверсная кинематика (2 сегмента, один эффектор и узел)
Здорово, народ!
Судя по тому, сколько людей ждёт этот пост, деваться особо некуда.
Как и обещал, рассказываю о том, каким образом проводилось вычисление положения частей рук относительно их крепления к туловищу.
Для начала вообще нужно уяснить, какие данные мы хотим дать игре, чтобы она произвела расчет. У нас всегда есть (по крайней мере, должна быть) х- и y-координата точки крепления руки к телу и длина частей руки. А вот дальше интереснее: если нам дан угол сочленения - то эта прямая кинематика и задача состоит в том, чтобы найти х- и y-координаты кисти воображаемой руки; ну а если даны эти самые координаты - то мы работаем с обратной (инверсной) кинематикой и найти нужно как раз углы, задающие положения сегментов в пространстве.
Как решать?
Для начала d - это расстояние от XY0 до XY1, но с небольшой оговоркой. Нельзя допустить, чтобы d было больше суммы длин наших сегментов, потому что при d равном этой величине мы получим максимально возможный угол - развернутый (180 градусов). Также резонно указать нижнюю границу, модуль разности длин сегментов вполне подойдет.
Получив а и b, работаем с прямоугольными треугольниками и получаем значения углов в радианах. Для того, чтобы их применить на ручках, остается только перевести их в градусную меру и прибавить к ним отклонение от оси ОХ (расчет углов ведется против часовой стрелки, поэтому чтобы направить ручки вниз, отнимаем их от дефолтных 0 градусов).
Важно: здесь мы никак не задаем ограничение на поворот вокруг XY0.
Для удобства можно вогнать это всё в скрипт:
GML: script get_angle
var x1=argument0, y1=argument1, x2=argument2, y2=argument3, r0=argument4, r1=argument5,GML: вызов скрипта get_angle (пример):
d=median(point_distance(x1, y1, x2, y2), r0+r1, max(r0, r1)-min(r0, r1);
var a, b, dir, angle;
a=(sqr(r0)-sqr(r1)+sqr(d))/(2*d)
b=d-a
dir=point_direction(x1, y1, x2, y2)
angle[0]=-radtodeg(arccos(a/r0)+dir
angle[1]=-radtodeg(arcsin(b/r1))+dir+90;
return angle
langle=get_angle(xl,yl,xr+lengthdir_x(38, arms_angle),yr+7+lengthdir_y(38, arms_angle)-8,r0,r1);
Возникает вопрос, а какие точки можно использовать в качестве XY1?
Такой скрипт можно использовать для разных целей.
Вот, допустим, нам нужно, чтобы игрок держал автомат с упором к плечу. В таком случае естественно, что он будет держаться руками на рукоятку и цевье/магазин.
Если упором является плечо, то резонно будет осью считать саму точку упора. Оружие будет вращаться вслед за мышью по этой оси.
Например, для правой руки с координатами крепления rx1,ry1, вызов скрипта будет выглядеть так:
GML: get_angle для правой руки, отрисовка:
rangle=get_angle(xr,yr,xr+lengthdir_x(30, arms_angle),yr+lengthdir_y(30, arms_angle),r0,r1)
Xright=xr+lengthdir_x(r0, rangle[0])*player_xscale;
Yright=yr+lengthdir_y(r0, rangle[0]);
draw_sprite_ext(kombineson[4], 1, Xright, yr+lengthdir_y(l1, rangle[0])+sinready, 1, 1, rangle[1], c_white, 1)
draw_sprite_ext(kombineson[4], 0, xr, yr+sinready, 1, 1, rangle[0], c_white, 1)
Где 30 - это длина в пикселях от плечевого упора до рукоятки, за которую держится кисть.
Что примечательно, левая рука при прибавлении к координатам lx1,ly1 поправки будет ориентироваться на место крепления правой руки, так как ось вращения автомата с самой левой рукой никакой связи, кроме как точки lx2,ly2, не имеет:
GML: get_angle для левой руки, отрисовка:
langle=get_angle(xl,yl,xr+lengthdir_x(38, arms_angle),yr+7+lengthdir_y(38, arms_angle)-8,r0,r1)
Xleft=xl+lengthdir_x(r0, langle[0])*player_xscale;
Yleft=yl+lengthdir_y(r0, langle[0]);
draw_sprite_ext(kombineson[3], 0, xl, yl+sinready, 1, 1, langle[0], c_white, 1)
draw_sprite_ext(kombineson[3], 1, Xleft, Yleft+sinready, 1, 1, langle[1], c_white, 1)
Где 38 - это расстояние от плечевого упора до передней части магазина, к которой и крепится lx2,ly2.
Принципиальных отличий в алгоритме при реализации на других ЯП вроде как нет.
Надеюсь, пост окажется полезным для ваших собственных разработок!
Всем добра и до скорого!
Тот трепетный момент, когда заработало.
Здорово, мои 35 подписчиков и все остальные!
Засиделся допоздна, но таки смог добить костную анимацию с обратной кинематикой.
Расчет ведет всего скрипт в пять строчек, которому необходимы лишь координаты плеча и кисти и длина частей, остальное всё делает сам (для кого-то мелочь, а для меня - достижение :D).
Нужен ли пост с геометрическим обоснованием и реализацией? Если да, то дайте знать.
Сталкеропроекты подъехали.
Привет, Пикабу!
Провалялся в двухгодичном беспостовом стазисе, пора наверстывать упущенное.
О возможности постинга в сообществах узнал буквально только что, и поэтому хочу поделиться с вами своим проектом - Abandoned Lands. Проект на GMS, пилится около года, однако большее время он пребывал в заморозке из-за сложной учёбы.
В общем, что у нас есть прямо сейчас?
- К - кастомизация: http://cs8.pikabu.ru/post_img/2016/06/09/8/14654741831129673... (боянометр орёт на мой же пост)
- Спокойное и не очень музло от моего товарища Владимира Порхунова (https://vk.com/tehrein)
- Куча стволов, которые я не знаю, как буду балансно вписывать, но художника уже не остановить.
- Ну и всякая лабуда, свойственная платформерам.
Упор собираюсь делать в первую очередь на сюжетку и побочное веселье от пасхалок, геймплейно же 2D-шутерок с RPG-системой, вероятнее всего с возможностью кооперативного прохождения.
Всем бобра и печенек.