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

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

Запись от 8Observer8 размещена 29.01.2026 в 22:55. Обновил(-а) 8Observer8 01.02.2026 в 04:27
Показов 2963 Комментарии 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
Просмотров: 1794

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

Размер: 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 Кб, 42 просмотров)
Тип файла: zip box2d-3.2.0-android.zip (2.30 Мб, 53 просмотров)
Тип файла: zip SDL3-devel-3.4.0-android.zip (15.69 Мб, 63 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru