Simple 2D adalah mesin grafis sumber terbuka kecil yang menyediakan kemampuan gambar, media, dan input 2D yang penting. Itu ditulis dalam C dan berfungsi di banyak platform, membuat jendela asli dan berinteraksi dengan perangkat keras menggunakan SDL sambil merender konten dengan OpenGL.
Harap dicatat README ini akan terus diperbarui seiring dengan penambahan fitur baru, perbaikan bug, dan perubahan lainnya. Lihat catatan rilis untuk tautan ke dokumentasi versi tersebut.
Buka masalah di GitHub jika Anda mengalami masalah, memiliki permintaan fitur, atau sekadar ingin mengajukan pertanyaan. Pelajari lebih lanjut tentang berkontribusi di bawah.
Simple 2D mendukung semua sistem operasi dan platform perangkat keras utama, dan diuji pada rilis terbaru macOS, iOS, tvOS, Windows, Linux, dan Raspbian di Raspberry Pi.
Untuk menginstal rilis terbaru...
Gunakan minuman rumahan:
brew tap simple2d/tap
brew install simple2d
Rumus Homebrew di atas juga akan menginstal framework iOS dan tvOS ke /usr/local/Frameworks/Simple2D
secara default. Setelah menginstal, jalankan perintah simple2d simulator
untuk melihat opsi yang tersedia untuk berinteraksi dengan simulator iOS dan tvOS. Jalankan simple2d build
untuk mempelajari cara membuat proyek Xcode dengan SDK iOS dan tvOS. Contoh proyek Xcode dapat ditemukan di repositori deps
.
Unduh penginstal Windows untuk Visual C++ atau MinGW.
Untuk MinGW, kami merekomendasikan penggunaan lingkungan MSYS2 (juga tersedia di Chocolatey) bersama dengan command prompt MinGW 64-bit (biasanya mingw64.exe
). Simple 2D juga dapat diinstal di MinGW menggunakan instruksi Linux di bawah ini.
Jalankan skrip Bash simple2d.sh
. Semuanya akan dijelaskan sepanjang proses dan Anda akan diberi tahu sebelum tindakan apa pun diambil. Untuk menjalankan skrip dari web, tempelkan cuplikan ini di terminal Anda:
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 mendukung platform ARM yang menjalankan Linux, seperti Raspberry Pi. Karena sebagian besar distribusi Linux memiliki paket SDL yang dikonfigurasi untuk platform desktop tradisional, skrip instalasi akan mengkompilasi SDL dari sumber ketika ARM terdeteksi, menonaktifkan sistem windowing (seperti X11) dan OpenGL (memaksa OpenGL ES).
Setelah terinstal, gunakan utilitas baris perintah simple2d
untuk memperbarui Simple 2D, memeriksa masalah, menampilkan perpustakaan yang diperlukan untuk mengkompilasi aplikasi, dan banyak lagi. Cukup jalankan simple2d
untuk melihat semua perintah dan opsi yang tersedia.
Alternatifnya, Anda dapat mengkompilasi dan menginstal Simple 2D dari sumber. Pertama-tama kloning repo ini menggunakan:
git clone --recursive https://github.com/simple2d/simple2d.git
Untuk menjaga ukuran repositori ini tetap kecil, submodul Git digunakan untuk mereferensikan media pengujian dan dependensi. Flag --recursive
memastikan submodul diinisialisasi dan diperbarui ketika repo ini dikloning. Jika Anda mengkloning repo ini tanpa tanda --recursive
, Anda masih dapat menginisialisasi dan memperbarui submodul dengan:
git submodule init
git submodule update --remote
Perbarui submodul ini kapan saja menggunakan git submodule update --remote
Selanjutnya, bangun dan instal pada sistem mirip Unix, termasuk Windows menggunakan MinGW, dengan menjalankan:
make && make install
Di Windows yang menggunakan Visual C++, buka prompt perintah Visual Studio 64-bit dan jalankan:
nmake /f NMakefile all install
Perhatikan bahwa di macOS dan Linux, makefile tidak akan memeriksa atau menginstal dependensi, tidak seperti menginstal melalui Homebrew atau skrip simple2d.sh
. Dependensi untuk Windows, yang mendukung Visual C++ dan MinGW, disertakan dalam repo ini (direferensikan oleh submodul deps
) dan diinstal oleh kedua makefile.
Pada Windows yang menggunakan Visual C++, Simple 2D akan diinstal ke %LOCALAPPDATA%simple2d
, jadi pastikan untuk menambahkannya ke jalur Anda (misalnya dengan set PATH=%PATH%;%LOCALAPPDATA%simple2d
). Dalam semua kasus lainnya, ini akan diinstal ke /usr/local/
. Di Windows yang menggunakan MinGW, pastikan /usr/local/bin
juga ada di jalur Anda.
Untuk membuat arsip rilis, yang dilampirkan sebagai unduhan pada setiap rilis, jalankan make release
di macOS dan Windows menggunakan MinGW, dan nmake /f NMakefile release
di Windows menggunakan Visual C++.
Simple 2D memiliki beberapa program pengujian untuk memastikan semuanya berfungsi sebagaimana mestinya.
auto.c
— Serangkaian pengujian unit otomatis untuk antarmuka publik.triangle.c
— Contoh "Halo Segitiga" di README ini.testcard.c
— Kartu grafis, mirip dengan kartu tes TV, dengan tujuan memastikan visual dan input berfungsi dengan baik.audio.c
— Menguji fungsi audio dengan berbagai format file yang ditafsirkan sebagai sampel suara dan musik.controller.c
— Memberikan umpan balik visual dan numerik dari input pengontrol game.triangle-ios-tvos.c
— triangle.c
yang dimodifikasi dan dirancang untuk perangkat iOS dan tvOS. Jalankan make test
, atau nmake /f NMakefile test
di Windows menggunakan Visual C++, untuk mengkompilasi pengujian ke direktori test/
. Eksekusi yang dihasilkan akan memiliki nama yang sama dengan file sumber C-nya. Karena jalur media diatur secara relatif dalam program pengujian ini, pastikan untuk melakukan cd
ke direktori test/
sebelum menjalankan pengujian, misalnya:
# 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
Setiap pengujian juga memiliki target makefile, sehingga Anda dapat membuat dan menjalankan pengujian menggunakan, misalnya, make test testcard
. Atau, hapus instalan semuanya dengan mudah, buat ulang Simple 2D dan uji dari sumber, lalu jalankan pengujian menggunakan make rebuild <name_of_test>
, misalnya:
# 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
Untuk menjalankan pengujian iOS dan tvOS, jalankan make frameworks && make install-frameworks
terlebih dahulu untuk membuat dan menginstal framework iOS dan tvOS. Selanjutnya, jalankan make ios
untuk menjalankan pengujian di simulator iOS dan make tvos
untuk dijalankan di Simulator tvOS.
Membuat aplikasi 2D itu sederhana! Mari kita membuat jendela dan menggambar segitiga...
#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 ;
}
Simpan kode di atas ke file bernama triangle.c
dan kompilasi dengan menjalankan simple2d build triangle.c
pada baris perintah (di MinGW, jalankan ini di prompt Bash). Sekarang jalankan aplikasi menggunakan ./triangle
di macOS dan Linux, atau triangle.exe
di Windows, dan nikmati segitiga menakjubkan Anda di jendela 640x480 dengan kecepatan 60 frame per detik!
Perintah simple2d build
adalah pintasan yang berguna untuk mengkompilasi satu file sumber. Tentu saja, Anda juga dapat menggunakan kompiler secara langsung, misalnya pada sistem mirip Unix:
cc triangle.c ` simple2d --libs ` -o triangle
Dan di Windows menggunakan Visual C++ di command prompt pengembang:
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 ) "
Mari belajar tentang penataan aplikasi untuk gambar 2D dan banyak lagi.
Semua konten yang dirender, masukan, dan suara dikontrol oleh jendela, jadi membuat jendela adalah hal pertama yang harus Anda lakukan. Mulailah dengan mendeklarasikan pointer ke struktur S2D_Window
dan inisialisasi menggunakan 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
);
Untuk mengatur lebar dan tinggi jendela sama dengan tampilan, gunakan S2D_DISPLAY_WIDTH
dan S2D_DISPLAY_HEIGHT
untuk nilai tersebut.
Bendera jendela dapat berupa 0
atau salah satu dari berikut ini:
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
Flag juga dapat digabungkan menggunakan operator bitwise OR, misalnya: S2D_RESIZABLE | S2D_BORDERLESS
Ukuran viewport, area dimana grafik digambar di jendela, dapat diatur secara independen dari ukuran jendela seperti:
window -> viewport . width = 400 ;
window -> viewport . height = 300 ;
Area pandang memiliki berbagai mode penskalaan, seperti S2D_FIXED
(area pandang tetap berukuran sama seiring perubahan ukuran jendela), S2D_EXPAND
(area pandang meluas hingga memenuhi jendela saat diubah ukurannya), S2D_SCALE
(default, di mana area pandang berskala secara proporsional dan dipusatkan di jendela), atau S2D_STRETCH
(viewport membentang hingga memenuhi seluruh jendela). Atur modenya seperti ini:
window -> viewport . mode = S2D_FIXED ;
Sebelum menampilkan jendela, atribut berikut dapat diatur:
window -> vsync = false; // set the vertical sync, true by default
window -> icon = "app.png" ; // set the icon for the window
Setelah jendela Anda siap digunakan, tunjukkan menggunakan:
S2D_Show ( window );
Kapan pun sebelum atau selama jendela ditampilkan, atribut berikut dapat disetel:
// 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 ;
Fungsi panggilan balik juga dapat diubah kapan saja — selengkapnya di bawah. Banyak nilai yang dapat dibaca dari struktur S2D_Window
, lihat file header simple2d.h
untuk detailnya.
Ikon jendela dapat diubah menggunakan:
S2D_SetIcon ( window , "new_icon.png" );
Ambil tangkapan layar jendela dalam format PNG, berikan jalur file:
S2D_Screenshot ( window , "./screenshot.png" );
Setelah selesai dengan jendela, bebaskan menggunakan:
S2D_FreeWindow ( window );
Perulangan jendela adalah tempat semua tindakan terjadi: kecepatan bingkai diatur, input ditangani, status aplikasi diperbarui, dan visual dirender. Anda ingin mendeklarasikan dua fungsi penting yang akan dipanggil oleh loop jendela: update()
dan render()
. Seperti game loop tradisional, update()
digunakan untuk memperbarui status aplikasi, dan render()
digunakan untuk menggambar adegan. 2D sederhana mengoptimalkan kedua fungsi untuk performa dan akurasi, jadi praktik yang baik adalah memisahkan tugas pembaruan dan rendering tersebut.
Fungsi pembaruan dan render akan terlihat seperti ini:
void update () { /* update your application state */ }
void render () { /* draw stuff */ }
Ingatlah untuk menambahkan nama fungsi ini saat memanggil S2D_CreateWindow()
(lihat bagian "Jendela" di atas untuk contohnya).
Untuk keluar dari loop jendela kapan saja, gunakan:
S2D_Close ( window );
Segala macam bentuk dan tekstur dapat digambar di jendela. Pelajari masing-masingnya di bawah ini.
Tersedia beberapa bentuk geometris, seperti segitiga, segi empat (yang dapat dibuat dari persegi panjang dan persegi), garis, dan lingkaran. Setiap bentuk mengandung titik sudut, yaitu tempat pertemuan dua garis membentuk sudut (segitiga memiliki tiga, misalnya). Untuk setiap titik sudut segitiga dan segiempat, ada enam nilai yang perlu ditetapkan: koordinat x
dan y
, dan empat nilai warna. Garis memiliki dua simpul, meskipun warna untuk setiap sudut dapat diatur. Lingkaran mempunyai satu titik pusat dan warna yang dapat diatur. Jika simpul memiliki nilai warna yang berbeda, ruang di antara keduanya akan dicampur dalam gradien.
Singkatan dari contoh di bawah ini adalah:
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 )
Dengan menggunakan notasi ini, x2
akan menjadi koordinat x
kedua, dan b2
akan menjadi nilai biru pada titik tersebut.
Untuk menggambar segitiga, gunakan:
S2D_DrawTriangle ( x1 , y1 , r1 , g1 , b1 , a1 ,
x2 , y2 , r2 , g2 , b2 , a2 ,
x3 , y3 , r3 , g3 , b3 , a3 );
Untuk menggambar segi empat, gunakan:
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 );
Untuk menggambar garis, gunakan:
S2D_DrawLine ( x1 , y1 , x2 , y2 ,
width ,
r1 , g1 , b1 , a1 ,
r2 , g2 , b2 , a2 ,
r3 , g3 , b3 , a3 ,
r4 , g4 , b4 , a4 );
Untuk menggambar lingkaran, gunakan:
S2D_DrawCircle ( x , y , radius , sectors , r , g , b , a );
Gambar dalam berbagai format populer, seperti JPEG, PNG, dan BMP dapat digambar di jendela. Berbeda dengan bentuk, gambar perlu dibaca dari file dan disimpan dalam memori. Cukup deklarasikan pointer ke struktur S2D_Image
dan inisialisasi menggunakan S2D_CreateImage()
yang menyediakan jalur file ke gambar.
S2D_Image * img = S2D_CreateImage ( "image.png" );
Jika gambar tidak dapat ditemukan, ia akan mengembalikan NULL
.
Setelah Anda memiliki gambar, Anda dapat mengubah posisi x, y
seperti ini:
img -> x = 125 ;
img -> y = 350 ;
Ubah ukuran gambar dengan menyesuaikan lebar dan tingginya:
img -> width = 256 ;
img -> height = 512 ;
Putar gambar seperti ini:
// 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 ;
Anda juga dapat mengatur warna gambar seperti ini:
// 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 ;
Terakhir, gambarlah gambarnya menggunakan:
S2D_DrawImage ( img );
Karena gambar dialokasikan secara dinamis, bebaskan gambar tersebut menggunakan:
S2D_FreeImage ( img );
Sprite adalah jenis gambar khusus yang dapat digunakan untuk membuat animasi. Untuk membuat sprite, deklarasikan pointer ke struktur S2D_Sprite
dan inisialisasi menggunakan S2D_CreateSprite()
yang menyediakan jalur file ke gambar sprite sheet.
S2D_Sprite * spr = S2D_CreateSprite ( "sprite_sheet.png" );
Jika gambar sprite tidak dapat ditemukan, ia akan mengembalikan NULL
.
Klip sprite sheet ke satu gambar dengan menyediakan persegi panjang kliping:
S2D_ClipSprite ( spr , x , y , width , height );
Posisi x, y
dari sprite itu sendiri dapat diubah seperti ini:
spr -> x = 150 ;
spr -> y = 275 ;
Ubah ukuran sprite dengan menyesuaikan lebar dan tingginya:
spr -> width = 100 ;
spr -> height = 100 ;
Putar sprite seperti ini:
// 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 ;
Anda juga dapat mengatur warna gambar sprite seperti ini:
// 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 ;
Terakhir, gambar sprite menggunakan:
S2D_DrawSprite ( spr );
Karena sprite dialokasikan secara dinamis, bebaskan sprite menggunakan:
S2D_FreeSprite ( spr );
Teks digambar seperti gambar. Mulailah dengan menemukan font OpenType favorit Anda (dengan ekstensi file .ttf
atau .otf
), lalu deklarasikan penunjuk ke struktur S2D_Text
dan inisialisasi menggunakan S2D_CreateText()
yang menyediakan jalur file ke font, pesan yang akan ditampilkan, dan ukurannya .
S2D_Text * txt = S2D_CreateText ( "vera.ttf" , "Hello world!" , 20 );
Jika file font tidak dapat ditemukan, maka akan mengembalikan NULL
.
Anda kemudian dapat mengubah posisi x, y
pada teks, misalnya:
txt -> x = 127 ;
txt -> y = 740 ;
Putar teks seperti ini:
// 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 ;
Ubah warna teks seperti ini:
// 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 ;
Terakhir, gambar teksnya menggunakan:
S2D_DrawText ( txt );
Anda juga dapat mengubah pesan teks kapan saja:
S2D_SetText ( txt , "A different message!" );
// Format text just like `printf`
S2D_SetText ( txt , "Welcome %s!" , player );
Karena teks dialokasikan secara dinamis, bebaskan teks tersebut menggunakan:
S2D_FreeText ( txt );
Simple 2D mendukung sejumlah format audio populer, termasuk WAV, MP3, Ogg Vorbis, dan FLAC. Ada dua jenis konsep audio: suara dan musik. Suara dimaksudkan sebagai sampel pendek, dimainkan tanpa gangguan, seperti efek. Musik adalah bagian yang lebih panjang yang dapat diputar, dijeda, dihentikan, dilanjutkan, dan dihilangkan, seperti soundtrack latar belakang.
Buat suara dengan terlebih dahulu mendeklarasikan penunjuk ke struktur S2D_Sound
dan inisialisasi menggunakan S2D_CreateSound()
yang menyediakan jalur ke file audio.
S2D_Sound * snd = S2D_CreateSound ( "sound.wav" );
Jika file audio tidak dapat ditemukan, ia akan mengembalikan NULL
.
Mainkan suara seperti ini:
S2D_PlaySound ( snd );
Anda bisa mendapatkan dan mengatur volume suara seperti ini:
int volume = S2D_GetSoundVolume ( snd );
S2D_SetSoundVolume ( snd , 50 ); // set volume 50%
Selain itu, dapatkan dan atur volume semua suara seperti ini, yang volumenya berkisar antara 0 (paling lembut) dan 100 (paling keras):
int volume = S2D_GetSoundMixVolume ();
S2D_SetSoundMixVolume ( 50 ); // set volume 50%
Karena suara dialokasikan secara dinamis, bebaskan suara tersebut menggunakan:
S2D_FreeSound ( snd );
Demikian pula, buat beberapa musik dengan mendeklarasikan pointer ke struktur S2D_Music
dan inisialisasi menggunakan S2D_CreateMusic()
yang menyediakan jalur ke file audio.
S2D_Music * mus = S2D_CreateMusic ( "music.ogg" );
Jika file audio tidak dapat ditemukan, ia akan mengembalikan NULL
.
Putar musik seperti ini, dengan parameter kedua adalah nilai boolean yang menunjukkan apakah musik harus diulang:
S2D_PlayMusic ( mus , true); // play on a loop
Hanya satu musik yang dapat dimainkan dalam satu waktu. Fungsi berikut untuk menjeda, melanjutkan, mendapatkan dan mengatur volume, menghentikan, dan memudarkan berlaku untuk musik apa pun yang sedang diputar:
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 );
Karena musik dialokasikan secara dinamis, bebaskan musik tersebut menggunakan:
S2D_FreeMusic ( mus );
2D sederhana dapat menangkap masukan dari apa saja. Mari pelajari cara mengambil peristiwa masukan dari mouse, keyboard, dan pengontrol game.
Ada tiga jenis peristiwa keyboard yang ditangkap oleh jendela: saat tombol ditekan, tombol ditahan, dan tombol dilepaskan. Saat peristiwa keyboard berlangsung, jendela memanggil fungsi on_key()
-nya.
Untuk menangkap input keyboard, pertama-tama tentukan fungsi on_key()
dan baca detail acara dari struktur S2D_Event
, misalnya:
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 ;
}
}
Lalu, lampirkan panggilan balik ke jendela:
window -> on_key = on_key ;
Posisi kursor mouse atau trackpad dapat dibaca kapan saja dari jendela. Perhatikan bahwa pojok kiri atas adalah titik asal (0, 0)
.
window -> mouse . x ;
window -> mouse . y ;
Untuk menangkap input tombol mouse, pertama-tama tentukan fungsi on_mouse()
dan baca detail event dari struktur S2D_Event
, misalnya:
// `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 ;
}
}
Lalu, lampirkan panggilan balik ke jendela:
window -> on_mouse = on_mouse ;
Sembunyikan kursor di atas jendela (dan tampilkan lagi) menggunakan:
S2D_HideCursor ();
S2D_ShowCursor ();
Semua pengontrol game secara otomatis terdeteksi, ditambahkan, dan dihapus. Ada dua jenis peristiwa yang ditangkap oleh jendela: gerakan sumbu dan penekanan tombol. Saat tombol ditekan atau joystick digerakkan, jendela akan memanggil fungsi on_controller()
. Tombol dan sumbu dipetakan ke tata letak pengontrol Xbox umum.
Untuk menangkap masukan pengontrol, pertama-tama tentukan fungsi on_controller()
dan baca detail peristiwa dari struktur S2D_Event
, misalnya:
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 ;
}
}
Lalu, lampirkan panggilan balik ke jendela:
window -> on_controller = on_controller ;
Lihat pengujian controller.c
untuk contoh lengkap tentang cara berinteraksi dengan pengontrol game.
Anda pasti akan menemukan pengontrol yang belum memiliki pemetaan tombol, terutama jika pengontrol tersebut masih baru. Lihat database pemetaan pengontrol yang bersumber dari komunitas untuk contoh cara menghasilkan string pemetaan. Setelah Anda memiliki string pemetaan, Anda dapat mendaftarkannya menggunakan S2D_AddControllerMapping()
, atau menambahkan beberapa pemetaan dari file menggunakan S2D_AddControllerMappingsFromFile()
dan menyediakan jalur file.
"Sederhana bisa lebih sulit daripada rumit: Anda harus bekerja keras untuk membuat pemikiran Anda jernih agar menjadi sederhana. Namun pada akhirnya, hal itu layak dilakukan karena begitu Anda sampai di sana, Anda bisa memindahkan gunung." —Steve Jobs
Meskipun kemajuan terus-menerus dalam perangkat keras dan perangkat lunak grafis komputer, memulai dengan pemrograman grafis sederhana tidaklah mudah atau dapat diakses. Kami sedang berupaya mengubahnya.
Jika Anda menyukai proyek ini, mohon pertimbangkan untuk berkontribusi! Periksa isu-isu terbuka untuk mendapatkan ide, atau sarankan ide Anda sendiri. Kami selalu mencari cara untuk membuat proyek ini lebih menarik dan meningkatkan pengalaman pengembang di setiap platform. Jangan khawatir jika Anda bukan ahli dalam C atau API grafis — kami akan dengan senang hati memandu Anda melalui semuanya.
Jika Anda seorang peretas C dan OS yang tangguh, Anda harus secara serius mempertimbangkan untuk berkontribusi pada SDL sehingga kami dapat terus menulis game tanpa mengkhawatirkan detail platform di bawahnya. Simak pembicaraan dari Steam Dev Days, khususnya pembicaraan Ryan C. Gordon tentang Game Development dengan SDL 2.0.
simple2d.sh
deps
(ikuti instruksi di README), dan jalankan git submodule update --remote
di repo ini untuk memperbarui submodulsimple2d.sh
dan simple2d.cmd
, lakukan perubahanrelease
make/nmakev#.#.#
; lampirkan penginstal Windows dan perpustakaan Apple ke catatan rilissha256
baru untuk arsip rilis dan kerangka kerja, menggunakan shasum -a 256 <file>
brew audit --strict ./simple2d.rb
untuk mendeteksi masalah apa pun pada rumusbrew install ./simple2d.rb
Simple 2D diciptakan oleh Tom Black, yang menganggap pemrograman grafis sederhana terlalu sulit dan memutuskan untuk melakukan sesuatu.
Semuanya Berlisensi MIT, jadi retaslah.
Menikmati!