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 ) install
Simple 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.sh
deps
(следуйте инструкциям в 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.rb
Simple 2D был создан Томом Блэком, который считал, что простое графическое программирование слишком сложно, и решил что-то с этим сделать.
Все лицензировано MIT, так что взломайте.
Наслаждаться!