Simple 2D — это небольшой графический движок с открытым исходным кодом, обеспечивающий основные возможности 2D-рисования, мультимедиа и ввода. Он написан на C и работает на многих платформах, создавая собственные окна и взаимодействуя с оборудованием с помощью SDL, одновременно отображая контент с помощью OpenGL.
Обратите внимание, что этот README будет постоянно обновляться по мере добавления новых функций, исправления ошибок и внесения других изменений. Просмотрите примечания к выпуску, чтобы найти ссылку на документацию этой версии.
Откройте проблему на GitHub, если у вас возникнут какие-либо проблемы, у вас есть запрос на добавление функции или вы просто хотите задать вопрос. Узнайте больше о вкладе ниже.
Simple 2D поддерживает все основные операционные системы и аппаратные платформы и протестирован на последних версиях macOS, iOS, tvOS, Windows, Linux и Raspbian на Raspberry Pi.
Чтобы установить последнюю версию...
Используйте доморощенный:
brew tap simple2d/tap
brew install simple2d Приведенная выше формула Homebrew также по умолчанию установит платформы iOS и tvOS в /usr/local/Frameworks/Simple2D . После установки запустите команду simple2d simulator , чтобы увидеть доступные варианты взаимодействия с симуляторами iOS и tvOS. Запустите simple2d build , чтобы узнать, как создавать проекты Xcode с помощью SDK iOS и tvOS. Примеры проектов Xcode можно найти в репозитории deps .
Загрузите установщик Windows для Visual C++ или MinGW.
Для MinGW мы рекомендуем использовать среду MSYS2 (также доступную на Chocolatey) вместе с 64-битной командной строкой MinGW (обычно mingw64.exe ). Simple 2D также можно установить на MinGW, используя приведенные ниже инструкции для Linux.
Запустите Bash-скрипт simple2d.sh . Все будет объяснено по ходу дела, и вам будет предложено выполнить какое-либо действие. Чтобы запустить скрипт из Интернета, вставьте этот фрагмент в свой терминал:
url= ' https://raw.githubusercontent.com/simple2d/simple2d/master/bin/simple2d.sh ' ; which curl > /dev/null && cmd= ' curl -fsSL ' || cmd= ' wget -qO - ' ; bash <( $cmd $url ) installSimple 2D поддерживает платформы ARM под управлением Linux, такие как Raspberry Pi. Поскольку в большинстве дистрибутивов Linux есть пакеты SDL, настроенные для традиционных настольных платформ, сценарий установки скомпилирует SDL из исходного кода при обнаружении ARM, отключив оконные системы (например, X11) и OpenGL (вместо этого заставляя использовать OpenGL ES).
После установки используйте утилиту командной строки simple2d для обновления Simple 2D, проверки наличия проблем, вывода библиотек, необходимых для компиляции приложений, и многого другого. Просто запустите simple2d , чтобы просмотреть все доступные команды и параметры.
Альтернативно вы можете скомпилировать и установить Simple 2D из исходного кода. Сначала клонируйте этот репозиторий, используя:
git clone --recursive https://github.com/simple2d/simple2d.git Чтобы размер этого репозитория был небольшим, подмодули Git используются для ссылки на тестовые носители и зависимости. Флаг --recursive гарантирует инициализацию и обновление подмодулей при клонировании этого репозитория. Если вам удалось клонировать этот репозиторий без флага --recursive , вы все равно можете инициализировать и обновлять подмодули с помощью:
git submodule init
git submodule update --remote Обновите эти подмодули в любое время, используя git submodule update --remote
Затем выполните сборку и установку в Unix-подобных системах, включая Windows, с помощью MinGW, запустив:
make && make installВ Windows, использующей Visual C++, откройте командную строку 64-разрядной версии Visual Studio и выполните:
nmake /f NMakefile all install Обратите внимание, что в macOS и Linux make-файл не проверяет и не устанавливает зависимости, в отличие от установки с помощью Homebrew или сценария simple2d.sh соответственно. Зависимости для Windows, поддерживающие как Visual C++, так и MinGW, включены в этот репозиторий (на который ссылается подмодуль deps ) и устанавливаются обоими make-файлами.
В Windows, использующей Visual C++, Simple 2D будет установлен в %LOCALAPPDATA%simple2d , поэтому обязательно добавьте его в свой путь (например, с помощью set PATH=%PATH%;%LOCALAPPDATA%simple2d ). Во всех остальных случаях он будет установлен в /usr/local/ . В Windows, использующей MinGW, убедитесь, что /usr/local/bin также находится в вашем пути.
Чтобы создать архивы выпусков, которые прикрепляются в виде загружаемых файлов к каждому выпуску, запустите make release в macOS и Windows с помощью MinGW и nmake /f NMakefile release в Windows с помощью Visual C++.
В Simple 2D есть несколько тестовых программ, позволяющих убедиться, что все работает как надо.
auto.c — набор автоматизированных модульных тестов для публичного интерфейса.triangle.c — пример «Hello Triangle» в этом README.testcard.c — графическая карта, аналогичная телевизионным тестовым картам, предназначенная для обеспечения правильной работы визуальных эффектов и ввода.audio.c — тестирует аудиофункции с различными форматами файлов, интерпретируемыми как звуковые образцы, так и музыку.controller.c — обеспечивает визуальную и числовую обратную связь о вводе игрового контроллера.triangle-ios-tvos.c — модифицированный файл triangle.c предназначенный для устройств iOS и tvOS. Запустите make test или nmake /f NMakefile test в Windows с помощью Visual C++, чтобы скомпилировать тесты в каталог test/ . Полученные исполняемые файлы будут иметь то же имя, что и их исходные файлы C. Поскольку в этих тестовых программах пути к носителям задаются относительно, перед запуском теста обязательно cd в каталог test/ , например:
# On Unix-like systems
make test && cd test/ && ./testcard
# On Windows using MinGW
make test & cd test & testcard.exe
# On Windows using Visual C++
nmake /f NMakefile test & cd test & testcard.exe У каждого теста также есть целевой файл makefile, поэтому вы можете создавать и запускать тесты, используя, например, make test testcard . Или удобно удалить все, пересобрать Simple 2D и тесты из исходников и запустить тесты с помощью make rebuild <name_of_test> , например:
# Rebuild and run `auto.c` then `testcard.c`...
# ...on Unix-like systems and Windows using MinGW
make rebuild auto testcard
# ...on Windows using Visual C++
nmake /f NMakefile rebuild auto testcard Чтобы запустить тесты iOS и tvOS, сначала запустите make frameworks && make install-frameworks для сборки и установки платформ iOS и tvOS. Затем запустите make ios , чтобы запустить тест в симуляторе iOS, и make tvos , чтобы запустить его в симуляторе tvOS.
Создавать 2D-приложения просто! Давайте создадим окно и нарисуем треугольник...
#include <simple2d.h>
void render () {
S2D_DrawTriangle (
320 , 50 , 1 , 0 , 0 , 1 ,
540 , 430 , 0 , 1 , 0 , 1 ,
100 , 430 , 0 , 0 , 1 , 1
);
}
int main () {
S2D_Window * window = S2D_CreateWindow (
"Hello Triangle" , 640 , 480 , NULL , render , 0
);
S2D_Show ( window );
return 0 ;
} Сохраните приведенный выше код в файл с именем triangle.c и скомпилируйте его, запустив simple2d build triangle.c в командной строке (в MinGW запустите это в командной строке Bash). Теперь запустите приложение, используя ./triangle в macOS и Linux или triangle.exe в Windows, и наслаждайтесь потрясающим треугольником в окне размером 640x480 со скоростью 60 кадров в секунду!
Команда simple2d build — это удобный ярлык для компиляции одного исходного файла. Конечно, вы также можете использовать компилятор напрямую, например, в Unix-подобных системах:
cc triangle.c ` simple2d --libs ` -o triangleА в Windows с использованием Visual C++ в командной строке разработчика:
cl triangle.c /I %LOCALAPPDATA% s imple2d /link /LIBPATH %LOCALAPPDATA% s imple2d s imple2d.lib /SUBSYSTEM:CONSOLE
# as a PowerShell command
iex " cl triangle.c $( simple2d --libs ) " Давайте узнаем о структурировании приложений для 2D-рисования и многом другом.
Весь визуализируемый контент, ввод и звук управляются окном, поэтому первое, что вам нужно сделать, — это создать окно. Начните с объявления указателя на структуру S2D_Window и инициализируйте его с помощью S2D_CreateWindow() .
S2D_Window * window = S2D_CreateWindow (
"Hello World!" , // title of the window
800 , 600 , // width and height
update , render , // callback function pointers (these can be NULL)
0 // flags
); Чтобы установить ширину и высоту окна так же, как у дисплея, используйте S2D_DISPLAY_WIDTH и S2D_DISPLAY_HEIGHT для этих значений соответственно.
Флаги окна могут быть равны 0 или любому из следующих значений:
S2D_RESIZABLE // allow window to be resized
S2D_BORDERLESS // show window without a border
S2D_FULLSCREEN // show window at fullscreen
S2D_HIGHDPI // enable high DPI mode Флаги также можно комбинировать с помощью побитового оператора ИЛИ, например: S2D_RESIZABLE | S2D_BORDERLESS
Размер области просмотра, области, где в окне отрисовывается графика, можно установить независимо от размера окна следующим образом:
window -> viewport . width = 400 ;
window -> viewport . height = 300 ; Окно просмотра имеет различные режимы масштабирования, такие как S2D_FIXED (окно просмотра остается того же размера при изменении размера окна), S2D_EXPAND (окно просмотра расширяется, чтобы заполнить окно при изменении размера), S2D_SCALE (по умолчанию, когда окно просмотра масштабируется пропорционально и центрируется в окне просмотра). окно) или S2D_STRETCH (окно просмотра растягивается на все окно). Установите такой режим:
window -> viewport . mode = S2D_FIXED ;Перед отображением окна можно установить следующие атрибуты:
window -> vsync = false; // set the vertical sync, true by default
window -> icon = "app.png" ; // set the icon for the windowКак только ваше окно будет готово к работе, покажите его, используя:
S2D_Show ( window );В любое время до или во время отображения окна можно установить следующие атрибуты:
// Cap the frame rate, 60 frames per second by default
window -> fps_cap = 30 ;
// Set the window background color, black by default
window -> background . r = 1.0 ;
window -> background . g = 0.5 ;
window -> background . b = 0.8 ;
window -> background . a = 1.0 ; Функции обратного вызова также можно изменить в любой момент — подробнее об этом ниже. Многие значения можно прочитать из структуры S2D_Window , подробности см. в заголовочном файле simple2d.h .
Значок окна можно изменить с помощью:
S2D_SetIcon ( window , "new_icon.png" );Сделайте снимок экрана окна в формате PNG, указав путь к файлу:
S2D_Screenshot ( window , "./screenshot.png" );Когда вы закончите работу с окном, освободите его, используя:
S2D_FreeWindow ( window ); В оконном цикле происходят все действия: задается частота кадров, обрабатывается ввод, обновляется состояние приложения и визуализируются визуальные элементы. Вам понадобится объявить две основные функции, которые будут вызываться оконным циклом: update() и render() . Как и традиционный игровой цикл, update() используется для обновления состояния приложения, а render() — для отрисовки сцены. Simple 2D оптимизирует обе функции для повышения производительности и точности, поэтому рекомендуется разделять задачи обновления и рендеринга.
Функции обновления и рендеринга должны выглядеть следующим образом:
void update () { /* update your application state */ }
void render () { /* draw stuff */ } Не забудьте добавить эти имена функций при вызове S2D_CreateWindow() (пример см. в разделе «Окно» выше).
Чтобы выйти из оконного цикла в любой момент, используйте:
S2D_Close ( window );В окне можно рисовать всевозможные формы и текстуры. Узнайте о каждом из них ниже.
Доступно несколько геометрических фигур, таких как треугольники, четырехугольники (из которых можно составить прямоугольники и квадраты), линии и круги. Каждая фигура содержит вершины, то есть места, где две линии встречаются, образуя угол (например, в треугольнике их три). Для каждой вершины треугольника и четырехугольника необходимо установить шесть значений: координаты x и y и четыре значения цвета. Линии имеют две вершины, хотя для каждого угла можно установить цвет. Круги имеют одну центральную точку и цвет, который можно установить. Когда вершины имеют разные значения цвета, пространство между ними смешивается градиентом.
Сокращение для приведенных ниже примеров:
x = the x coordinate
y = the y coordinate
// Color range is from 0.0 to 1.0
r = red
g = green
b = blue
a = alpha ( opacity ) Используя это обозначение, x2 будет второй координатой x , а b2 будет синим значением в этой вершине.
Чтобы нарисовать треугольник, используйте:
S2D_DrawTriangle ( x1 , y1 , r1 , g1 , b1 , a1 ,
x2 , y2 , r2 , g2 , b2 , a2 ,
x3 , y3 , r3 , g3 , b3 , a3 );Чтобы нарисовать четырехугольник, используйте:
S2D_DrawQuad ( x1 , y1 , r1 , g1 , b1 , a1 ,
x2 , y2 , r2 , g2 , b2 , a2 ,
x3 , y3 , r3 , g3 , b3 , a3 ,
x4 , y4 , r4 , g4 , b4 , a4 );Чтобы нарисовать линию, используйте:
S2D_DrawLine ( x1 , y1 , x2 , y2 ,
width ,
r1 , g1 , b1 , a1 ,
r2 , g2 , b2 , a2 ,
r3 , g3 , b3 , a3 ,
r4 , g4 , b4 , a4 );Чтобы нарисовать круг, используйте:
S2D_DrawCircle ( x , y , radius , sectors , r , g , b , a ); В окне можно рисовать изображения во многих популярных форматах, таких как JPEG, PNG и BMP. В отличие от фигур, изображения необходимо считывать из файлов и сохранять в памяти. Просто объявите указатель на структуру S2D_Image и инициализируйте его с помощью S2D_CreateImage() указав путь к файлу изображения.
S2D_Image * img = S2D_CreateImage ( "image.png" ); Если изображение не может быть найдено, оно вернет NULL .
Получив изображение, вы можете изменить его положение x, y следующим образом:
img -> x = 125 ;
img -> y = 350 ;Измените размер изображения, отрегулировав его ширину и высоту:
img -> width = 256 ;
img -> height = 512 ;Поверните изображение следующим образом:
// Angle should be in degrees
// The last parameter is the point the image should rotate around, either:
// S2D_CENTER, S2D_TOP_LEFT, S2D_TOP_RIGHT, S2D_BOTTOM_LEFT, or S2D_BOTTOM_RIGHT
S2D_RotateImage ( img , angle , S2D_CENTER );
// Or, set a custom point to rotate around
img -> rx = 50 ;
img -> ry = 75 ;
// Set the rotation angle directly
img -> rotate = 90 ;Вы также можете настроить цвет изображения следующим образом:
// Default is 1.0 for each, a white color filter
img -> color . r = 1.0 ;
img -> color . g = 0.8 ;
img -> color . b = 0.2 ;
img -> color . a = 1.0 ;Наконец, нарисуйте изображение, используя:
S2D_DrawImage ( img );Поскольку изображения распределяются динамически, освободите их, используя:
S2D_FreeImage ( img ); Спрайты — это особые виды изображений, которые можно использовать для создания анимации. Чтобы создать спрайт, объявите указатель на структуру S2D_Sprite и инициализируйте его с помощью S2D_CreateSprite() указав путь к файлу изображения листа спрайта.
S2D_Sprite * spr = S2D_CreateSprite ( "sprite_sheet.png" ); Если изображение спрайта не может быть найдено, оно вернет NULL .
Обрежьте лист спрайтов к одному изображению, предоставив прямоугольник обрезки:
S2D_ClipSprite ( spr , x , y , width , height ); Положение x, y самого спрайта можно изменить следующим образом:
spr -> x = 150 ;
spr -> y = 275 ;Измените размер спрайта, отрегулировав его ширину и высоту:
spr -> width = 100 ;
spr -> height = 100 ;Поверните спрайт следующим образом:
// Angle should be in degrees
// The last parameter is the point the sprite should rotate around, either:
// S2D_CENTER, S2D_TOP_LEFT, S2D_TOP_RIGHT, S2D_BOTTOM_LEFT, or S2D_BOTTOM_RIGHT
S2D_RotateSprite ( spr , angle , S2D_CENTER );
// Or, set a custom point to rotate around
spr -> rx = 50 ;
spr -> ry = 75 ;
// Set the rotation angle directly
spr -> rotate = 90 ;Вы также можете настроить цвет изображения спрайта следующим образом:
// Default is 1.0 for each, a white color filter
spr -> color . r = 1.0 ;
spr -> color . g = 0.8 ;
spr -> color . b = 0.2 ;
spr -> color . a = 1.0 ;Наконец, нарисуйте спрайт, используя:
S2D_DrawSprite ( spr );Поскольку спрайты распределяются динамически, освободите их, используя:
S2D_FreeSprite ( spr ); Текст рисуется так же, как изображения. Начните с поиска вашего любимого шрифта OpenType (с расширением файла .ttf или .otf ), затем объявите указатель на структуру S2D_Text и инициализируйте его с помощью S2D_CreateText() указав путь к файлу шрифта, отображаемое сообщение и размер. .
S2D_Text * txt = S2D_CreateText ( "vera.ttf" , "Hello world!" , 20 ); Если файл шрифта не найден, он вернет NULL .
Затем вы можете изменить положение текста по x, y , например:
txt -> x = 127 ;
txt -> y = 740 ;Поверните текст следующим образом:
// Angle should be in degrees
// The last parameter is the point the text should rotate around, either:
// S2D_CENTER, S2D_TOP_LEFT, S2D_TOP_RIGHT, S2D_BOTTOM_LEFT, or S2D_BOTTOM_RIGHT
S2D_RotateText ( txt , angle , S2D_CENTER );
// Or, set a custom point to rotate around
txt -> rx = 50 ;
txt -> ry = 75 ;
// Set the rotation angle directly
txt -> rotate = 90 ;Измените цвет текста следующим образом:
// Default is 1.0 for each, a white color filter
txt -> color . r = 0.5 ;
txt -> color . g = 1.0 ;
txt -> color . b = 0.0 ;
txt -> color . a = 0.7 ;Наконец, нарисуйте текст, используя:
S2D_DrawText ( txt );Вы также можете изменить текстовое сообщение в любое время:
S2D_SetText ( txt , "A different message!" );
// Format text just like `printf`
S2D_SetText ( txt , "Welcome %s!" , player );Поскольку текст выделяется динамически, освободите его, используя:
S2D_FreeText ( txt );Simple 2D поддерживает ряд популярных аудиоформатов, включая WAV, MP3, Ogg Vorbis и FLAC. Существует два типа аудиоконцепций: звуки и музыка. Звуки представляют собой короткие семплы, воспроизводимые без перерыва, как эффект. Музыка предназначена для более длинных фрагментов, которые можно воспроизводить, ставить на паузу, останавливать, возобновлять и затухать, как фоновый саундтрек.
Создайте звук, сначала объявив указатель на структуру S2D_Sound , и инициализируйте его с помощью S2D_CreateSound() указав путь к аудиофайлу.
S2D_Sound * snd = S2D_CreateSound ( "sound.wav" ); Если аудиофайл не может быть найден, он вернет NULL .
Воспроизведите звук следующим образом:
S2D_PlaySound ( snd );Вы можете получить и установить громкость звука следующим образом:
int volume = S2D_GetSoundVolume ( snd );
S2D_SetSoundVolume ( snd , 50 ); // set volume 50%Кроме того, получите и установите громкость всех звуков следующим образом: громкость находится в диапазоне от 0 (самый тихий) до 100 (самый громкий):
int volume = S2D_GetSoundMixVolume ();
S2D_SetSoundMixVolume ( 50 ); // set volume 50%Поскольку звуки распределяются динамически, освободите их, используя:
S2D_FreeSound ( snd ); Аналогичным образом создайте музыку, объявив указатель на структуру S2D_Music и инициализируйте ее с помощью S2D_CreateMusic() указав путь к аудиофайлу.
S2D_Music * mus = S2D_CreateMusic ( "music.ogg" ); Если аудиофайл не может быть найден, он вернет NULL .
Воспроизведите музыку следующим образом, где второй параметр — логическое значение, указывающее, следует ли повторять музыку:
S2D_PlayMusic ( mus , true); // play on a loopОдновременно можно воспроизводить только одно музыкальное произведение. Следующие функции для приостановки, возобновления, увеличения и настройки громкости, остановки и затухания применяются к любой музыке, воспроизводимой в данный момент:
S2D_PauseMusic ();
S2D_ResumeMusic ();
S2D_StopMusic ();
int volume = S2D_GetMusicVolume ();
S2D_SetMusicVolume ( 50 ); // set volume 50%
// Fade out over 2000 milliseconds, or 2 seconds
S2D_FadeOutMusic ( 2000 );Поскольку музыка распределяется динамически, освободите ее, используя:
S2D_FreeMusic ( mus );Simple 2D может захватывать данные практически из чего угодно. Давайте научимся получать события ввода с мыши, клавиатуры и игровых контроллеров.
Окно фиксирует три типа событий клавиатуры: когда клавиша нажата, клавиша удерживается нажатой и клавиша отпускается. Когда происходит событие клавиатуры, окно вызывает функцию on_key() .
Чтобы перехватить ввод с клавиатуры, сначала определите функцию on_key() и прочитайте сведения о событии из структуры S2D_Event , например:
void on_key ( S2D_Event e ) {
// Check `e.key` for the key being interacted with
switch ( e . type ) {
case S2D_KEY_DOWN :
// Key was pressed
break ;
case S2D_KEY_HELD :
// Key is being held down
break ;
case S2D_KEY_UP :
// Key was released
break ;
}
}Затем прикрепите обратный вызов к окну:
window -> on_key = on_key ; Положение курсора мыши или трекпада можно прочитать в любой момент из окна. Обратите внимание, что верхний левый угол — это начало координат (0, 0) .
window -> mouse . x ;
window -> mouse . y ; Чтобы захватить ввод кнопки мыши, сначала определите функцию on_mouse() и прочитайте сведения о событии из структуры S2D_Event , например:
// `e.button` can be one of:
// S2D_MOUSE_LEFT
// S2D_MOUSE_MIDDLE
// S2D_MOUSE_RIGHT
// S2D_MOUSE_X1
// S2D_MOUSE_X2
void on_mouse ( S2D_Event e ) {
switch ( e . type ) {
case S2D_MOUSE_DOWN :
// Mouse button was pressed
// Use `e.button` to see what button was clicked
// Check `e.dblclick` to see if was a double click
break ;
case S2D_MOUSE_UP :
// Mouse button was released
// Use `e.button` to see what button was clicked
// Check `e.dblclick` to see if was a double click
break ;
case S2D_MOUSE_SCROLL :
// Mouse was scrolled
// Check `e.direction` for direction being scrolled, normal or inverted:
// S2D_MOUSE_SCROLL_NORMAL
// S2D_MOUSE_SCROLL_INVERTED
// Check `e.delta_x` and `e.delta_y` for the difference in x and y position
break ;
case S2D_MOUSE_MOVE :
// Mouse was moved
// Check `e.delta_x` and `e.delta_y` for the difference in x and y position
break ;
}
}Затем прикрепите обратный вызов к окну:
window -> on_mouse = on_mouse ;Скройте курсор над окном (и покажите его снова), используя:
S2D_HideCursor ();
S2D_ShowCursor (); Все игровые контроллеры автоматически обнаруживаются, добавляются и удаляются. Окно фиксирует два типа событий: движение оси и нажатие кнопок. При нажатии кнопки или перемещении джойстика окно вызывает функцию on_controller() . Кнопки и оси сопоставлены с общим макетом контроллера Xbox.
Чтобы перехватить входные данные контроллера, сначала определите функцию on_controller() и прочитайте сведения о событии из структуры S2D_Event , например:
void on_controller ( S2D_Event e ) {
// Check `e.which` for the controller being interacted with
switch ( e . type ) {
case S2D_AXIS :
// Controller axis was moved
// Use `e.axis` to get the axis, either:
// S2D_AXIS_LEFTX, S2D_AXIS_LEFTY,
// S2D_AXIS_RIGHTX, S2D_AXIS_RIGHTY,
// S2D_AXIS_TRIGGERLEFT, S2D_AXIS_TRIGGERRIGHT,
// or S2D_AXIS_INVALID
// Use `e.value` to get the value of the axis
break ;
// For the following button events, use `e.button`
// to get the button pressed or released, which can be:
// S2D_BUTTON_A, S2D_BUTTON_B, S2D_BUTTON_X, S2D_BUTTON_Y,
// S2D_BUTTON_BACK, S2D_BUTTON_GUIDE, S2D_BUTTON_START,
// S2D_BUTTON_LEFTSTICK, S2D_BUTTON_RIGHTSTICK,
// S2D_BUTTON_LEFTSHOULDER, S2D_BUTTON_RIGHTSHOULDER,
// S2D_BUTTON_DPAD_UP, S2D_BUTTON_DPAD_DOWN,
// S2D_BUTTON_DPAD_LEFT, S2D_BUTTON_DPAD_RIGHT,
// or S2D_BUTTON_INVALID
case S2D_BUTTON_DOWN :
// Controller button was pressed
break ;
case S2D_BUTTON_UP :
// Controller button was released
break ;
}
}Затем прикрепите обратный вызов к окну:
window -> on_controller = on_controller ; Подробный пример взаимодействия с игровыми контроллерами см. в тесте controller.c
Вы наверняка найдете контроллеры, у которых еще нет назначений кнопок, особенно если они совершенно новые. Примеры создания строк сопоставления см. в базе данных сопоставлений контроллеров, созданной сообществом. Получив строку сопоставления, вы можете зарегистрировать ее с помощью S2D_AddControllerMapping() или добавить несколько сопоставлений из файла с помощью S2D_AddControllerMappingsFromFile() и указать путь к файлу.
«Простое может быть сложнее сложного: вам придется усердно работать, чтобы очистить свое мышление и сделать его простым. Но в конце концов оно того стоит, потому что, дойдя до цели, вы сможете свернуть горы». — Стив Джобс
Несмотря на продолжающееся развитие аппаратного и программного обеспечения компьютерной графики, начать работу с простым графическим программированием не так уж просто и доступно. Мы работаем над тем, чтобы изменить это.
Если вам понравился проект, пожалуйста, рассмотрите возможность внести свой вклад! Ознакомьтесь с открытыми вопросами и предложите свои идеи. Мы всегда ищем способы сделать проект более привлекательным и улучшить условия для разработчиков на каждой платформе. Не волнуйтесь, если вы не являетесь экспертом в C или графических API — мы будем рады помочь вам во всем этом.
Если вы заядлый хакер C и OS, вам следует серьезно подумать о том, чтобы внести свой вклад в SDL, чтобы мы могли продолжать писать игры, не беспокоясь о деталях платформы. Взгляните на выступления Steam Dev Days, особенно на выступление Райана С. Гордона о разработке игр с помощью SDL 2.0.
simple2d.shdeps (следуйте инструкциям в README) и запустите git submodule update --remote в этом репозитории, чтобы обновить подмодуль.simple2d.sh и simple2d.cmd , зафиксируйте изменения.release make/nmake.v#.#.# ; прикрепите установщики Windows и библиотеки Apple к примечаниям к выпускуsha256 для архива релиза и фреймворков, используя shasum -a 256 <file>brew audit --strict ./simple2d.rb чтобы обнаружить любые проблемы с формулой.brew install ./simple2d.rbSimple 2D был создан Томом Блэком, который считал, что простое графическое программирование слишком сложно, и решил что-то с этим сделать.
Все лицензировано MIT, так что взломайте.
Наслаждаться!