Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
- Telegram Web
Telegram Web
Паркур документально подтверждён.
Media is too big
VIEW IN TELEGRAM
Если кому то показалось, что я пропал 😜 это не так. Я вошел в поток и всю неделю переделывал несколько раз алгоритм синхронизации. Сделал наверно десяток итераций. Пришло осознание как решать проблемы о которых я говорил в предыдущем видео.

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

ВК
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Мы с вами так устроены, что погружаясь в любой практический процесс, будь то работа или какой то личный проект, мы начинаем осознавать и понимать более точно и явно теоретические основы этого процесса. Можно прочитать много книг о том как водить автомобиль, но так и не научиться этому. Поэтому практика обычно идет вместе с теорией. Я считаю, что практика первична и имеет более важное значение чем теория, потому что теория рождается из практики. На практике мы можем реально почувствовать на уровне ощущений какие либо закономерности или попробовать несколько вариантов. По другому мы загружаем контекст в голову. Много контекста. И спустя какое то время приходит полное понимание теории. Мозг как будто упорядочивает эту информацию. И тут нужно сделать шаг назад и переосмыслить то, что ты делаешь. Всегда есть места где можно что то поменять и рабочий процесс или ваше дело улучшится.

Собственно со мной это происходит регулярно и произошло и в этот раз. Попробовав много подходов в синхронизации данных мне пришло понимание теории. И в этом видео я рассказываю подробно про виды синхронизации и как они переплетаются между собой.

В предыдущем видео я показывал демо синхронизации

ВК
Media is too big
VIEW IN TELEGRAM
Будни разработки. Рассказываю про настройку физики танка и доработку своего физического движка. Корректная физика не всегда означает удачную реализацию. В управлении танка мы хотим видеть предсказуемость и удобство управления.
Media is too big
VIEW IN TELEGRAM
Продолжаю рассказывать про свой физический движок в танках. Мы используем принцип мягких коллайдеров, такие коллайдеры определяют точки контактов и распределения сил не на поверхности тел, а всегда немного внутри. Это позволяет решать проблемы совмещения разных физических реальностей при сетевой синхронизации. В дальнейшем нас ждет еще много интересного - танки с инверсной кинематикой на деталях.
Media is too big
VIEW IN TELEGRAM
Всем привет! Продолжаю делать синхронизацию на базе детерминизма. Про это я подробно рассказывал здесь. В данном видео я показываю синхронизацию более сложной стркутуры данных. Она описывает два экрана, между которыми можно переключаться. На первом экране у нас небольшая физическая симуляция и обработка столкновений. На втором экране можно редактировать текст одновременно. Данный подход синхронизации организует строго последовательный поток событий или как я называю изменений от пользователей. Этот поток синхронизируется между всеми узлами, тем самым позволяя нам расчитать точную сцену в любой момент. Кроме того в данном подходе свои изменения применяются сразу, тем самым пользователь никогда не увидит лага от своих действий. Синхронизацию текста я сделал на базе строки и позиций курсоров, которые взял из уже готового нашего контрола. Я вычисляю дифф текста и преобразую его в одну из операций - удаление или вставка. Так же есть операция перемещения курсора. Эти операции применяются последовательно на каждом клиенте. И дают идентичный результат. Более подробно в видео.
Готовим новый танчик! Лекарь-вампир на колесах. Может оказаться самой проходимой единицей, от такого нигде не скроешься. Догонит и залечит до смерти!)
This media is not supported in your browser
VIEW IN TELEGRAM
Наблюдая за квадом в дикой природе, можно отметить его забавный способ передвижения. Видимо он еще слишком юн)
Media is too big
VIEW IN TELEGRAM
Всем привет!

В предыдущем видео я показывал синхронизацию ввода текста с двух клиентов на компьютере.

Затем занялся андроидом и начал тестить одновременный ввод. С компа и с телефона. Если медленно делать ввод с обоих девайсов, то все прекрасно. А если быстро вводить, то тут по какой то причине курсор компа стал прыгать в сторону курсора андроида. Начал дебажить, выяснил, что проблема где то в вводе из экранной клавиатуры. Стал более детально смотреть... 

Тут надо небольшое отступление, о том как работает экранная клавиатура. Предполагается если вы хотите сделать свой кастомный контрол текста, то есть некий интерфейс к экранной клавиатуре. Ime State по сути это сам текст, а так же начало и конец выделения. Собственно есть запись этих свойств и получение событий при изменении. Если мы нажали на наш текстовый блок, то мы передаем туда эти свойства. Потом пользователь вводит текст любым удобным ему способом, который есть в его клавиатуре. И далее у нас есть возможность прочитать эти свойства.

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

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

И так по кругу, каждый кадр, если есть активность пользователей.

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

В итоге проблему решил комбинировано. 

- Во первых добавил историю установки значения. Она убирает ивенты от наших изменений и старые значения не всплывают.
- Во вторых сузил контекст. Я передаю в Ime State все, что попало в текущее выделение в том числе текущее слово.

Более подробно показываю в видео.
This media is not supported in your browser
VIEW IN TELEGRAM
Танки на Steam Deck ;)
SteamOS - это Linux, а значит мы можем делать с ним всякое.
Собрано из исходников на самой консоли
This media is not supported in your browser
VIEW IN TELEGRAM
Наконец настало время всерьёз взяться за ассеты ⌨️

Вкомпиливать всё в .exe - вариант нормальный, только если игра небольшая и имеет ограниченное количество контента.

Но это не случай танков.

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

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

Для того, чтобы дать максимально кайфовый ux, лучше грузить файлы постепенно. Так можно ограничить влияние на производительность и хорошо распределить загрузку во времени.

На видео наглядная разница между этими подходами 📝
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Экспериментирую с физикой нового колесного танчика на испытательном полигоне. Мы хотим видеть у себя не только классические гусеницы, но что-то интересное и необычное :)
Media is too big
VIEW IN TELEGRAM
Всем привет!

Ранее я уже рассказывал с чем столкнулся при сетевой синхронизации текста и как удалось решить. Но это решение нас не устроило и выглядело как полу-мера. К тому же у нас есть доступ к Java и промежуточному С++ слою - так как мы форкнули к себе android-activity.

Раньше мы устанавливали состояние в начале и дальше получали полный результат от клавиатуры. Если же нажимались DELETE / ENTER то эти события обрабатывались нами в Rust и переустанавливался целиком состояние в клавиатуру. Но это все было последовательно и асинхронность не мешала. То есть состояния пересылались целиком туда-сюда.

Сейчас же я устанавливаю состояние однократно в начале. И дальше получаю изменения от обоих сторон и меняю стейт текста там и там. Но пришлось попотеть, пробрасывая ивенты туда-сюда. Об этом подробнее в видео.
Media is too big
VIEW IN TELEGRAM
Хочу поделиться своими впечатлениями от квада, который долго простоял в гараже. Я его замоделил еще год назад и вот наконец-то он ожил! И это очень странное и приятное чувство, видеть как уже давно привычный, статичный образ, вдруг начинает жить своей жизнью)
Media is too big
VIEW IN TELEGRAM
Проверяю на прочность новую ресурсную систему 🔨

Справа внизу в консоли ожесточённо генерятся случайные png. Всё ради того, чтобы поймать (и починить) даже самые немыслимые обстоятельства.
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Всем привет!

Я продолжаю копаться в Android и его клавиатуре. Сейчас я переделал алгоритм работы с ней. Ранее я уже рассказывал про это тут. Сейчас я устанавливаю состояние однократно в начале из нашего Rust кода в нативный слой на Java и C++. И дальше получаю изменения от обоих сторон и меняю текст и в нашем коде и в нативном слое.

Теперь алгоритм доработан и можно обкатать его вместе с сетевой синхронизацией. Об этом и поговорим в видео.
Media is too big
VIEW IN TELEGRAM
Всем привет!
Столкнулся с "зацикливанием" build.rs.
Пришлось погрузиться в логику работы Cargo с build-скриптами.
Есть детали, которые следует чётко понимать, если собираешься этим пользоваться.
Media is too big
VIEW IN TELEGRAM
В дополнение, еще одно предостережение для тех кто, собирается использовать cargo:warning для отладки своих билд-скриптов.

Не попадайтесь в эту "ловушку"!!!
Media is too big
VIEW IN TELEGRAM
Недавно разбирались с коллегами, как нам добиться минимальной задержки ввода в наших программах. Это капец как важно, ведь отзывчивость сильно влияет на приятность ощущений.

В процессе получился вот такой полезный видос о том, какие виды синхронизации кадров вообще существуют 📝
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/03 08:08:27
Back to Top
HTML Embed Code: