Simple 2D は、重要な 2D 描画、メディア、および入力機能を提供する小型のオープンソース グラフィック エンジンです。 C で書かれており、多くのプラットフォームで動作し、ネイティブ ウィンドウを作成し、OpenGL でコンテンツをレンダリングしながら SDL を使用してハードウェアと対話します。
この 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 シミュレーターと対話するために利用可能なオプションを確認します。 simple2d build
を実行して、iOS および tvOS SDK を使用して Xcode プロジェクトをビルドする方法を学びます。 Xcode プロジェクトの例はdeps
リポジトリにあります。
Visual C++ または MinGW の Windows インストーラーをダウンロードします。
MinGW の場合は、MSYS2 環境 (Chocolatey でも入手可能) と MinGW 64 ビット コマンド プロンプト (通常はmingw64.exe
) を使用することをお勧めします。 Simple 2D は、以下の Linux の手順を使用して MinGW にインストールすることもできます。
simple2d.sh
Bash スクリプトを実行します。途中ですべてが説明され、アクションが実行される前にプロンプトが表示されます。 Web からスクリプトを実行するには、次のスニペットをターミナルに貼り付けます。
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
含まれていることを確認してください。
各リリースにダウンロードとして添付されるリリース アーカイブをビルドするには、macOS および Windows では MinGW を使用してmake release
を実行し、Windows では Visual C++ を使用して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
。 Windows 上で Visual C++ を使用してmake test
または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 シミュレーターでテストを実行し、 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 プロンプトで実行します)。 macOS と Linux では./triangle
、Windows ではtriangle.exe
使用してアプリを実行し、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
フラグは、ビットごとの 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 );
ウィンドウ ループでは、フレーム レートの設定、入力の処理、アプリの状態の更新、ビジュアルのレンダリングなど、すべてのアクションが行われます。ウィンドウ ループによって呼び出される 2 つの重要な関数、 update()
とrender()
を宣言する必要があります。従来のゲーム ループと同様に、 update()
はアプリケーションの状態を更新するために使用され、 render()
シーンの描画に使用されます。 Simple 2D はパフォーマンスと精度のために両方の関数を最適化するため、更新タスクとレンダリング タスクを分離しておくことをお勧めします。
update 関数と render 関数は次のようになります。
void update () { /* update your application state */ }
void render () { /* draw stuff */ }
S2D_CreateWindow()
呼び出すときは、これらの関数名を忘れずに追加してください (例については、上記の「ウィンドウ」セクションを参照してください)。
いつでもウィンドウ ループを終了するには、次を使用します。
S2D_Close ( window );
ウィンドウ内にはあらゆる種類の形状やテクスチャを描画できます。それぞれについては以下で説明します。
三角形、四角形 (長方形や正方形を作成できる)、線、円など、いくつかの幾何学的形状を使用できます。すべての図形には頂点、つまり 2 本の線が交わって角度を形成する場所 (たとえば、三角形には 3 つあります) が含まれています。三角形と四角形の各頂点には、 x
座標とy
座標、および 4 つの色の値という 6 つの値を設定する必要があります。線には 2 つの頂点がありますが、各隅の色を設定できます。円には 1 つの中心点と設定可能な色があります。頂点のカラー値が異なる場合、頂点間の空間はグラデーションでブレンドされます。
以下の例の短縮形は次のとおりです。
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
2 番目の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 などの多くの一般的なオーディオ形式をサポートしています。オーディオの概念には、サウンドと音楽の 2 種類があります。サウンドは、エフェクトのように、途切れることなく再生される短いサンプルであることを目的としています。音楽は、バックグラウンド サウンドトラックのように、再生、一時停止、停止、再開、フェードアウトできる長い曲向けです。
まず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
が返されます。
次のように音楽を再生します。ここで、2 番目のパラメータは、音楽を繰り返すかどうかを示すブール値です。
S2D_PlayMusic ( mus , true); // play on a loop
一度に再生できる音楽は 1 曲だけです。一時停止、再開、音量の取得と設定、停止、フェードアウトに関する次の機能は、現在再生中の音楽に適用されます。
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 );
シンプル 2D は、ほぼあらゆるものからの入力をキャプチャできます。マウス、キーボード、ゲーム コントローラーから入力イベントを取得する方法を学びましょう。
ウィンドウによってキャプチャされるキーボード イベントには、キーが押されたとき、キーが押されたとき、キーが放されたときの 3 種類があります。キーボード イベントが発生すると、ウィンドウは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 ();
すべてのゲーム コントローラーは自動的に検出、追加、削除されます。ウィンドウによってキャプチャされるイベントには、軸の動きとボタンの押下という 2 種類があります。ボタンが押されるか、ジョイスティックが動かされると、ウィンドウは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
リポジトリを更新し (README の指示に従って)、このリポジトリで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
使用して式のインストールをテストします。シンプル 2D は、単純なグラフィックス プログラミングが難しすぎると考え、それを何とかしようと考えた Tom Black によって作成されました。
すべては MIT ライセンスを取得しているので、ハックしてください。
楽しむ!