Simple 2D는 필수 2D 드로잉, 미디어 및 입력 기능을 제공하는 소형 오픈 소스 그래픽 엔진입니다. C로 작성되었으며 다양한 플랫폼에서 작동하며 기본 창을 만들고 SDL을 사용하여 하드웨어와 상호 작용하는 동시에 OpenGL로 콘텐츠를 렌더링합니다.
이 README는 새로운 기능이 추가되고, 버그가 수정되고, 기타 변경 사항이 발생하면 지속적으로 업데이트됩니다. 해당 버전의 문서에 대한 링크는 릴리스 노트를 확인하세요.
문제가 발생하거나 기능 요청이 있거나 단순히 질문하고 싶은 경우 GitHub에서 문제를 공개하세요. 아래에서 기여에 대해 자세히 알아보세요.
Simple 2D는 모든 주요 운영 체제 및 하드웨어 플랫폼을 지원하며 macOS, iOS, tvOS, Windows, Linux 및 Raspberry Pi의 Raspbian 최신 릴리스에서 테스트되었습니다.
최신 릴리스를 설치하려면...
홈브루 사용:
brew tap simple2d/tap
brew install simple2d
위의 Homebrew 공식은 기본적으로 iOS 및 tvOS 프레임워크를 /usr/local/Frameworks/Simple2D
에 설치합니다. 설치 후 simple2d simulator
명령을 실행하여 iOS 및 tvOS 시뮬레이터와 상호 작용하는 데 사용 가능한 옵션을 확인하세요. iOS 및 tvOS SDK로 Xcode 프로젝트를 빌드하는 방법을 알아보려면 simple2d build
실행하세요. 예제 Xcode 프로젝트는 deps
저장소에서 찾을 수 있습니다.
Visual C++ 또는 MinGW용 Windows 설치 프로그램을 다운로드합니다.
MinGW의 경우 MinGW 64비트 명령 프롬프트(일반적으로 mingw64.exe
)와 함께 MSYS2 환경(Chocolatey에서도 사용 가능)을 사용하는 것이 좋습니다. Simple 2D는 아래 Linux 지침을 사용하여 MinGW에 설치할 수도 있습니다.
simple2d.sh
Bash 스크립트를 실행합니다. 진행 과정에서 모든 것이 설명되며 조치를 취하기 전에 메시지가 표시됩니다. 웹에서 스크립트를 실행하려면 다음 코드 조각을 터미널에 붙여넣으세요.
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는 Raspberry Pi와 같은 Linux를 실행하는 ARM 플랫폼을 지원합니다. 대부분의 Linux 배포판에는 기존 데스크톱 플랫폼용으로 구성된 SDL 패키지가 있으므로 ARM이 감지되면 설치 스크립트가 소스에서 SDL을 컴파일하여 윈도우 시스템(예: 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
사용하여 언제든지 이러한 하위 모듈을 업데이트하세요.
다음으로 다음을 실행하여 MinGW를 사용하는 Windows를 포함한 Unix 계열 시스템에서 빌드하고 설치합니다.
make && make install
Visual C++를 사용하는 Windows에서는 64비트 Visual Studio 명령 프롬프트를 열고 다음을 실행합니다.
nmake /f NMakefile all install
macOS 및 Linux에서는 각각 Homebrew 또는 simple2d.sh
스크립트를 통해 설치하는 것과 달리 makefile이 종속성을 확인하거나 설치하지 않습니다. Visual C++와 MinGW를 모두 지원하는 Windows용 종속성은 이 저장소( deps
하위 모듈에서 참조)에 포함되어 있으며 두 makefile에 의해 설치됩니다.
Visual C++를 사용하는 Windows에서는 Simple 2D가 %LOCALAPPDATA%simple2d
에 설치되므로 이를 경로에 추가해야 합니다(예: set PATH=%PATH%;%LOCALAPPDATA%simple2d
). 다른 모든 경우에는 /usr/local/
에 설치됩니다. MinGW를 사용하는 Windows에서는 /usr/local/bin
도 경로에 있는지 확인하세요.
각 릴리스에 다운로드로 첨부되는 릴리스 아카이브를 빌드하려면 MinGW를 사용하여 macOS 및 Windows에서 make release
실행하고 Visual C++를 사용하여 Windows에서 nmake /f NMakefile release
실행합니다.
Simple 2D에는 모든 것이 제대로 작동하는지 확인하는 여러 테스트 프로그램이 있습니다.
auto.c
— 공개 인터페이스에 대한 자동화된 단위 테스트 세트입니다.triangle.c
— 이 README의 "Hello Triangle" 예제입니다.testcard.c
— 시각적 및 입력이 제대로 작동하는지 확인하는 것을 목표로 하는 TV 테스트 카드와 유사한 그래픽 카드입니다.audio.c
— 사운드 샘플과 음악으로 해석되는 다양한 파일 형식으로 오디오 기능을 테스트합니다.controller.c
— 게임 컨트롤러 입력에 대한 시각적 및 수치적 피드백을 제공합니다.triangle-ios-tvos.c
— iOS 및 tvOS 장치용으로 설계된 수정된 triangle.c
입니다. make test
또는 Windows에서 Visual C++를 사용하여 nmake /f NMakefile test
실행하여 테스트를 test/
디렉터리로 컴파일합니다. 결과 실행 파일은 C 소스 파일과 동일한 이름을 갖게 됩니다. 미디어 경로는 이러한 테스트 프로그램에서 상대적으로 설정되므로 테스트를 실행하기 전에 test/
디렉터리로 cd
입력해야 합니다. 예를 들면 다음과 같습니다.
# 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 시뮬레이터에서 테스트를 실행하고 tvOS 시뮬레이터에서 실행되도록 make 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 프롬프트에서 실행). 이제 macOS 및 Linux에서는 ./triangle
사용하고 Windows에서는 triangle.exe
사용하여 앱을 실행하고 초당 60프레임의 640x480 창에서 멋진 삼각형을 즐겨보세요!
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
플래그는 비트별 OR 연산자를 사용하여 결합할 수도 있습니다. 예: 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
좌표와 4개의 색상 값 등 6개의 값을 설정해야 합니다. 선에는 두 개의 정점이 있지만 각 모서리의 색상을 설정할 수 있습니다. 원에는 설정할 수 있는 단일 중심점과 색상이 있습니다. 정점의 색상 값이 서로 다른 경우 정점 사이의 공간이 그라데이션으로 혼합됩니다.
아래 예의 약칭은 다음과 같습니다.
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을 사용한 게임 개발에 대한 Ryan C. Gordon의 강연을 살펴보세요.
simple2d.sh
에서 SDL 버전 업데이트deps
repo를 업데이트하고(README의 지침을 따르세요) 이 repo에서 git submodule update --remote
실행하여 하위 모듈을 업데이트하세요.simple2d.sh
및 simple2d.cmd
에서 Simple 2D 버전 번호를 업데이트하고 변경 사항을 커밋합니다.release
make/nmake 대상을 사용하여 Windows 설치 프로그램(Visual C++ 및 MinGW용) 및 Apple 라이브러리를 생성합니다.v#.#.#
형식의 태그를 사용하여 GitHub에서 새 릴리스를 만듭니다. Windows 설치 프로그램 및 Apple 라이브러리를 릴리스 노트에 첨부shasum -a 256 <file>
사용하여 릴리스 및 프레임워크 아카이브에 대한 새로운 sha256
체크섬을 계산합니다.brew audit --strict ./simple2d.rb
실행하여 수식 관련 문제를 감지합니다.brew install ./simple2d.rb
사용하여 수식 설치를 테스트합니다.Simple 2D는 단순한 그래픽 프로그래밍이 너무 어렵다고 생각하고 이에 대한 조치를 취하기로 결정한 Tom Black에 의해 만들어졌습니다.
모든 것이 MIT 라이센스이므로 해킹해 보세요.
즐기다!