Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров

Запись от 8Observer8 размещена 29.01.2026 в 22:55. Обновил(-а) 8Observer8 01.02.2026 в 04:27
Показов 3660 Комментарии 0

Содержание блога

Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в отличие от v2, которая написана на C++, но v2 была близка с Си. Насколько я знаю, в Box2D v2 совсем не использовалась STL (Стандартная библиотека шаблонов).

Комментарий Gemini 3 по поводу Box2D новой C-версии:

Переход Box2D на чистый Си (версия v3) — это большой шаг для производительности и переносимости, особенно в контексте разработки под Android на SDL3. Ваше замечание про STL верно: Box2D всегда стремилась к минимализму и контролю над памятью, что делало её «почти Си-шной» даже во второй версии.
Если у вас не установлены Android SDK, NDK, JDK, и т.д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т.д.

Сборка примера



  • Скачайте этот пример. На всякий случай, я прикрепил его в виде архива: sdlcross-box2d.zip
  • Извлеките пример из архива. Можете открыть папку с извлечённым примером в редакторе кода Sublime Text 4: https://www.sublimetext.com/download
    Название: 7abd664a7ef1b7b85dc89a6ce069fb7bb72a07d3.png
Просмотров: 1883

Размер: 4.3 Кб
  • Скачайте архив SDL3-devel-3.4.0-android.zip. Этот архив можно найти по ссылке
  • Скачайте архив box2d-3.2.0-android.zip. Эту библиотеку можно собрать для Android из исходников с помощью инструкции: Инструкция в разработке
  • Оба архива выше содержат файлы формата .aar
  • Файлы формата .arr из этих архивов нужно скопировать в папку "android-project/app/libs":
    Название: 472895b0852c7d7497bcf0755fdd198b4956c288.png
Просмотров: 1878

Размер: 3.2 Кб
  • Нужно прописать пути к этим библиотекам в скаченном ранее примере. Откройте файл "android-project/app/build.gradle", и пропишите пути к библиотекам. Должно выглядеть так:
    Code
    1
    2
    3
    4
    5
    
    dependencies {
        implementation files('libs/SDL3-3.4.0.aar')
        implementation files('libs/box2d-3.2.0.aar')
        implementation 'androidx.appcompat:appcompat:1.5.1'
    }
  • В этом же файле есть секция externalNativeBuild:

    Code
    1
    2
    3
    4
    5
    6
    7
    
            externalNativeBuild {
                cmake {
                    arguments '-DANDROID_STL=c++_shared', '-DWITH_IMAGE=ON', '-DWITH_MIXER=OFF', '-DWITH_NET=OFF', '-DWITH_BOX2D=OFF'
                    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                    // abiFilters 'arm64-v8a'
                }
            }
  • В этой секции (externalNativeBuild) нужно закомментировать строку "abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'" и убрать комментарий со строки "abiFilters 'arm64-v8a'":

    Code
    1
    2
    3
    4
    5
    6
    7
    
            externalNativeBuild {
                cmake {
                    arguments '-DANDROID_STL=c++_shared', '-DWITH_IMAGE=ON', '-DWITH_MIXER=OFF', '-DWITH_NET=OFF', '-DWITH_BOX2D=OFF'
                    // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                    abiFilters 'arm64-v8a'
                }
            }
  • В той же секции externalNativeBuild нужно отключить DWITH_IMAGE, исправив ON на OFF и нужно изменить ON на OFF для Box2D: '-DWITH_BOX2D=ON' для включения активации работы с Box2D в этом примере-шаблоне, вот так:

    Code
    1
    2
    3
    4
    5
    6
    7
    
            externalNativeBuild {
                cmake {
                    arguments '-DANDROID_STL=c++_shared', '-DWITH_IMAGE=OFF', '-DWITH_MIXER=OFF', '-DWITH_NET=OFF', '-DWITH_BOX2D=ON'
                    // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                    abiFilters 'arm64-v8a'
                }
            }
  • Откройте CMD в папке "android-project" и выполните команду для сборки программы в APK:
    Bash
    1
    
    gradlew assembleDebug
  • Откройте вторую консоль "android-project/app/build/outputs/apk/debug" (здесь создаётся APK файл с именем app-debug.apk) и выполните команду для установки приложения на устройство, которое подключено по USB-кабелю к компьютеру:
    Bash
    1
    
    adb install -r app-debug.apk
  • Найдите установленное приложение на смартфоне, запустите его. Вы увидите визуализацию коллайдеров линиями
  • Если ничего не выводится или приложение закрывается, то выполните команду в консоли:
    Bash
    1
    
    adb logcat SDL:V DEBUG:I *:S
  • Эта команда выводит лог из устройства в консоль. Если непонятно в чём дело, то копируйте лог в ИИ, например, в Gemini, ChatGPT, DeepSeek и т.д.

Перевод примера с Си на C++



  • Откройте файл CMakeLists.txt. Вторая строка вы видите "C":
    Code
    1
    
    project(sdlcross C)
  • Нужно либо заменить "C" на "CXX":
    Code
    1
    
    project(sdlcross CXX)
  • Либо лучше просто удалить "C":
    Code
    1
    
    project(sdlcross)
  • Тогда можно даже создавать смешанные проекты. Можно добавить "CXX" к "C", что тоже позволит комбинировать в одном проекте С и C++ файлы
  • Найдите в CMakeLists.txt этот код:
    Code
    1
    2
    3
    
    add_sdl_executable(sdlcross
        src/main.cpp
    )
  • Замените текст в коде выше "src/main.c" на "src/main.cpp"
  • Сам файл "main.c" в проекте нужно переименовать в "main.cpp"
  • Вы можете скопировать содержимое файла "main.cpp" и попросить ИИ, например: Gemini, ChatGPT, DeepSeek и т.д. объяснить, что нужно поменять в коде, чтобы перевести его на C++ и вставьте сам код
  • Скопируйте для ИИ содержимое файлов "context.h" и "box2d-debug-drawer.h" и спросите ИИ, что нужно изменить в этих файлах для перевода на C++
  • Это интересный опыт сравнения Си и C++ с помощью ИИ. Проделайте это самостоятельно.
Вложения
Тип файла: zip sdlcross-box2d.zip (452.9 Кб, 83 просмотров)
Тип файла: zip box2d-3.2.0-android.zip (2.30 Мб, 102 просмотров)
Тип файла: zip SDL3-devel-3.4.0-android.zip (15.69 Мб, 107 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru