Лаборатория • сборки
رفتن به کانال در Telegram
878
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-27 روز
+2230 روز
در حال بارگیری داده...
کانالهای مشابه
ابر برچسبها
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
ژوئن '25
ژوئن '25
+8
در 0 کانالها
مه '25
+63
در 2 کانالها
Get PRO
آوریل '25
+24
در 1 کانالها
Get PRO
مارس '25
+93
در 1 کانالها
Get PRO
فوریه '25
+7
در 0 کانالها
Get PRO
ژانویه '25
+14
در 0 کانالها
Get PRO
دسامبر '24
+11
در 0 کانالها
Get PRO
نوامبر '24
+12
در 0 کانالها
Get PRO
اکتبر '24
+31
در 2 کانالها
Get PRO
سپتامبر '24
+4
در 0 کانالها
Get PRO
اوت '24
+13
در 0 کانالها
Get PRO
ژوئیه '24
+10
در 0 کانالها
Get PRO
ژوئن '24
+7
در 0 کانالها
Get PRO
مه '24
+13
در 0 کانالها
Get PRO
آوریل '24
+7
در 0 کانالها
Get PRO
مارس '24
+7
در 0 کانالها
Get PRO
فوریه '24
+8
در 0 کانالها
Get PRO
ژانویه '24
+20
در 0 کانالها
Get PRO
دسامبر '23
+32
در 1 کانالها
Get PRO
نوامبر '23
+27
در 0 کانالها
Get PRO
اکتبر '23
+17
در 0 کانالها
Get PRO
سپتامبر '23
+26
در 0 کانالها
Get PRO
اوت '23
+28
در 0 کانالها
Get PRO
ژوئیه '23
+24
در 0 کانالها
Get PRO
ژوئن '23
+14
در 0 کانالها
Get PRO
مه '23
+15
در 0 کانالها
Get PRO
آوریل '23
+26
در 0 کانالها
Get PRO
مارس '23
+130
در 0 کانالها
Get PRO
فوریه '23
+206
در 0 کانالها
Get PRO
ژانویه '23
+25
در 0 کانالها
Get PRO
دسامبر '22
+33
در 0 کانالها
Get PRO
نوامبر '22
+481
در 0 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 23 ژوئن | 0 | |||
| 22 ژوئن | 0 | |||
| 21 ژوئن | 0 | |||
| 20 ژوئن | 0 | |||
| 19 ژوئن | 0 | |||
| 18 ژوئن | 0 | |||
| 17 ژوئن | 0 | |||
| 16 ژوئن | +1 | |||
| 15 ژوئن | +2 | |||
| 14 ژوئن | 0 | |||
| 13 ژوئن | 0 | |||
| 12 ژوئن | 0 | |||
| 11 ژوئن | 0 | |||
| 10 ژوئن | 0 | |||
| 09 ژوئن | 0 | |||
| 08 ژوئن | +1 | |||
| 07 ژوئن | +1 | |||
| 06 ژوئن | 0 | |||
| 05 ژوئن | 0 | |||
| 04 ژوئن | +2 | |||
| 03 ژوئن | 0 | |||
| 02 ژوئن | +1 | |||
| 01 ژوئن | 0 |
پستهای کانال
Всем привет!
Я продолжаю копаться в Android и его клавиатуре. Сейчас я переделал алгоритм работы с ней. Ранее я уже рассказывал про это тут. Сейчас я устанавливаю состояние однократно в начале из нашего Rust кода в нативный слой на Java и C++. И дальше получаю изменения от обоих сторон и меняю текст и в нашем коде и в нативном слое.
Теперь алгоритм доработан и можно обкатать его вместе с сетевой синхронизацией. Об этом и поговорим в видео.
| 2 | Проверяю на прочность новую ресурсную систему 🔨
Справа внизу в консоли ожесточённо генерятся случайные png. Всё ради того, чтобы поймать (и починить) даже самые немыслимые обстоятельства. | 741 |
| 3 | Хочу поделиться своими впечатлениями от квада, который долго простоял в гараже. Я его замоделил еще год назад и вот наконец-то он ожил! И это очень странное и приятное чувство, видеть как уже давно привычный, статичный образ, вдруг начинает жить своей жизнью) | 891 |
| 4 | Всем привет!
Ранее я уже рассказывал с чем столкнулся при сетевой синхронизации текста и как удалось решить. Но это решение нас не устроило и выглядело как полу-мера. К тому же у нас есть доступ к Java и промежуточному С++ слою - так как мы форкнули к себе android-activity.
Раньше мы устанавливали состояние в начале и дальше получали полный результат от клавиатуры. Если же нажимались DELETE / ENTER то эти события обрабатывались нами в Rust и переустанавливался целиком состояние в клавиатуру. Но это все было последовательно и асинхронность не мешала. То есть состояния пересылались целиком туда-сюда.
Сейчас же я устанавливаю состояние однократно в начале. И дальше получаю изменения от обоих сторон и меняю стейт текста там и там. Но пришлось попотеть, пробрасывая ивенты туда-сюда. Об этом подробнее в видео. | 801 |
| 5 | Экспериментирую с физикой нового колесного танчика на испытательном полигоне. Мы хотим видеть у себя не только классические гусеницы, но что-то интересное и необычное :) | 646 |
| 6 | Наконец настало время всерьёз взяться за ассеты ⌨️
Вкомпиливать всё в .exe - вариант нормальный, только если игра небольшая и имеет ограниченное количество контента.
Но это не случай танков.
Здесь нам понадобится система, которая позволит тонко управлять состоянием бинарных ассетов (это которые лежат рядом с программой).
И тут важный момент: если читать файл за один вызов, то он максимально быстро окажется в памяти, но ценой неприятного затыка (особенно если этот файл жирный).
Для того, чтобы дать максимально кайфовый ux, лучше грузить файлы постепенно. Так можно ограничить влияние на производительность и хорошо распределить загрузку во времени.
На видео наглядная разница между этими подходами 📝 | 779 |
| 7 | Танки на Steam Deck ;)
SteamOS - это Linux, а значит мы можем сделать с ним много интересного | 858 |
| 8 | Всем привет!
В предыдущем видео я показывал синхронизацию ввода текста с двух клиентов на компьютере.
Затем занялся андроидом и начал тестить одновременный ввод. С компа и с телефона. Если медленно делать ввод с обоих девайсов, то все прекрасно. А если быстро вводить, то тут по какой то причине курсор компа стал прыгать в сторону курсора андроида. Начал дебажить, выяснил, что проблема где то в вводе из экранной клавиатуры. Стал более детально смотреть...
Тут надо небольшое отступление, о том как работает экранная клавиатура. Предполагается если вы хотите сделать свой кастомный контрол текста, то есть некий интерфейс к экранной клавиатуре. Ime State по сути это сам текст, а так же начало и конец выделения. Собственно есть запись этих свойств и получение событий при изменении. Если мы нажали на наш текстовый блок, то мы передаем туда эти свойства. Потом пользователь вводит текст любым удобным ему способом, который есть в его клавиатуре. И далее у нас есть возможность прочитать эти свойства.
В случае когда у нас нет синхронизации, мы однократно устанавливаем текст когда нажали на наш текстовый блок. И дальше мы только читаем результат. В случае же синхронизации нам необходимо периодически устанавливать измененный другими пользователями текст.
Получается такая последовательность:
- читаем текст с клавиатуры
- вычисляем изменения
- вносим эти изменения на таймлайн
- так же вносим новые изменения на таймлайн других игроков
- пересчитываем результирующий текст
- утанавливаем новый текст в клавиатуру
И так по кругу, каждый кадр, если есть активность пользователей.
Так вот проблема в том, что установка и чтение асинхронны. Клавиатура очевидно работает не в нашем потоке, она как отдельная программа. При установке мы шлем ей наше состояние. Она его применяет у себя, потом обрабатывает ввод пользователя и отправляет нам результат. А мы его получаем по событию. То есть асинхронно. Еще проблема в том, что клавиатура присылает изменения и на нашу установку текста. И получается мы отправляем периодически текст, а нам спустя кадр-два прилетает старое обновление. Невозможно узнать это пользователь ввел или это мы установили? Вот к чему приводит асинхронность и плохой дизайн интерфейса.
В итоге проблему решил комбинировано.
- Во первых добавил историю установки значения. Она убирает ивенты от наших изменений и старые значения не всплывают.
- Во вторых сузил контекст. Я передаю в Ime State все, что попало в текущее выделение в том числе текущее слово.
Более подробно показываю в видео. | 816 |
| 9 | Наблюдая за квадом в дикой природе, можно отметить его забавный способ передвижения. Видимо он еще слишком юн) | 855 |
| 10 | Готовим новый танчик! Лекарь-вампир на колесах. Может оказаться самой проходимой единицей, от такого нигде не скроешься. Догонит и залечит до смерти!) | 768 |
| 11 | Всем привет! Продолжаю делать синхронизацию на базе детерминизма. Про это я подробно рассказывал здесь. В данном видео я показываю синхронизацию более сложной стркутуры данных. Она описывает два экрана, между которыми можно переключаться. На первом экране у нас небольшая физическая симуляция и обработка столкновений. На втором экране можно редактировать текст одновременно. Данный подход синхронизации организует строго последовательный поток событий или как я называю изменений от пользователей. Этот поток синхронизируется между всеми узлами, тем самым позволяя нам расчитать точную сцену в любой момент. Кроме того в данном подходе свои изменения применяются сразу, тем самым пользователь никогда не увидит лага от своих действий. Синхронизацию текста я сделал на базе строки и позиций курсоров, которые взял из уже готового нашего контрола. Я вычисляю дифф текста и преобразую его в одну из операций - удаление или вставка. Так же есть операция перемещения курсора. Эти операции применяются последовательно на каждом клиенте. И дают идентичный результат. Более подробно в видео. | 705 |
| 12 | Продолжаю рассказывать про свой физический движок в танках. Мы используем принцип мягких коллайдеров, такие коллайдеры определяют точки контактов и распределения сил не на поверхности тел, а всегда немного внутри. Это позволяет решать проблемы совмещения разных физических реальностей при сетевой синхронизации. В дальнейшем нас ждет еще много интересного - танки с инверсной кинематикой на деталях. | 672 |
| 13 | Продолжаем экспериментировать со своим физическим движок в танках. Мы используем принцип мягких коллайдеров, такие коллайдеры определяют точки контактов и распределения сил не на поверхности тел, а всегда немного внутри. Это позволяет решать проблемы совмещения разных физических реальностей при сетевой синхронизации. | 5 |
| 14 | Будни разработки. Рассказываю про настройку физики танка и доработку своего физического движка. Корректная физика не всегда означает удачную реализацию. В управлении танка мы хотим видеть предсказуемость и удобство управления. | 822 |
| 15 | Мы с вами так устроены, что погружаясь в любой практический процесс, будь то работа или какой то личный проект, мы начинаем осознавать и понимать более точно и явно теоретические основы этого процесса. Можно прочитать много книг о том как водить автомобиль, но так и не научиться этому. Поэтому практика обычно идет вместе с теорией. Я считаю, что практика первична и имеет более важное значение чем теория, потому что теория рождается из практики. На практике мы можем реально почувствовать на уровне ощущений какие либо закономерности или попробовать несколько вариантов. По другому мы загружаем контекст в голову. Много контекста. И спустя какое то время приходит полное понимание теории. Мозг как будто упорядочивает эту информацию. И тут нужно сделать шаг назад и переосмыслить то, что ты делаешь. Всегда есть места где можно что то поменять и рабочий процесс или ваше дело улучшится.
Собственно со мной это происходит регулярно и произошло и в этот раз. Попробовав много подходов в синхронизации данных мне пришло понимание теории. И в этом видео я рассказываю подробно про виды синхронизации и как они переплетаются между собой.
В предыдущем видео я показывал демо синхронизации
ВК | 707 |
| 16 | Терра. 12 апреля 4025 года.
Неожиданно на одной из локаций открылся Варп-разлом.
Мы быстро собрали штурмовой исследовательский отряд.
В него вошли лучшие умы и самые отважные воители.
По ту сторону нас встретил жестокий глюковый шторм.
Часть десантников перестала выходить на связь.
Но оставшиеся продолжили храбро исполнять миссию.
В ходе исследования мы обнаружили загадочный монумент, посвящённый гуманоидному существу.
Кажется, его оставили здесь не просто так...
С Днём космонавтики 🚀 | 703 |
| 17 | Если кому то показалось, что я пропал 😜 это не так. Я вошел в поток и всю неделю переделывал несколько раз алгоритм синхронизации. Сделал наверно десяток итераций. Пришло осознание как решать проблемы о которых я говорил в предыдущем видео.
В данном видео я показываю синхронизацию одной позиции через ретрансляцию изменений с разных девайсов. Эта позиция - голова червячка 😂, а тело всегда рассчитывается по алгоритму. Так же я показываю как разрешается конфликт - если слать изменения с разных девайсов. В этом случае изменения смешиваются и мы получаем ожидаемый результат.
ВК | 609 |
| 18 | Паркур документально подтверждён. | 587 |
| 19 | В ходе тактической зачистки багов, я решил немного отвлечься и сделать что-нибудь красивое.
Под горячую руку подвернулись дебажные линии, которые у нас рисовались сквозь всю геометрию. Из-за этого было сложно понять, где они расположены относительно других объектов.
Сначала я подумал рисовать скрытые линии просто более прозрачными, но это слишком скучно 😏
В ходе экспериментов у меня получился вот такой стилизованный дизеринг.
И выглядит приятно, и задачу решает.
А ещё, на моём канале можно посмотреть видос о том, как такое сделать. Заходите, не стесняйтесь 😇 | 744 |
| 20 | Пробую использовать запеченное в вершины просвечивание света для растительности на наших локациях. Делюсь первыми результатами. | 674 |
