[Bahasa Inggris | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Рский | Türkçe | Українська]
Pyxel adalah mesin game retro untuk Python.
Dengan spesifikasi sederhana yang terinspirasi oleh konsol game retro, seperti menampilkan hanya 16 warna dan mendukung 4 saluran suara, Anda dapat dengan mudah menikmati membuat game gaya-seni piksel.
Pengembangan pyxel didorong oleh umpan balik pengguna. Tolong beri Pyxel bintang di GitHub!
Spesifikasi dan API Pyxel terinspirasi oleh PICO-8 dan TIC-80.
Pyxel adalah open source di bawah lisensi MIT dan bebas digunakan. Mari kita mulai membuat game retro dengan Pyxel!
Setelah menginstal python3 (versi 3.8 atau lebih tinggi), jalankan perintah berikut:
pip install -U pyxel
Saat menginstal Python menggunakan penginstal resmi, pastikan untuk memeriksa opsi Add Python 3.x to PATH
untuk mengaktifkan perintah pyxel
.
Setelah memasang homebrew, jalankan perintah berikut:
brew install pipx
pipx ensurepath
pipx install pyxel
Untuk meningkatkan pyxel setelah instalasi, jalankan pipx upgrade pyxel
.
Setelah menginstal paket SDL2 ( libsdl2-dev
untuk Ubuntu), Python3 (versi 3.8 atau lebih tinggi), dan python3-pip
, jalankan perintah berikut:
sudo pip3 install -U pyxel
Jika perintah sebelumnya gagal, pertimbangkan membangun pyxel dari sumber dengan mengikuti instruksi di Makefile.
Versi web Pyxel tidak memerlukan instalasi Python atau Pyxel dan berjalan pada PC, smartphone, dan tablet dengan browser web yang didukung.
Untuk instruksi terperinci, silakan merujuk ke halaman ini.
Setelah menginstal pyxel, Anda dapat menyalin contoh ke direktori saat ini dengan perintah berikut:
pyxel copy_examples
Contoh -contoh berikut akan disalin ke direktori Anda saat ini:
01_hello_pyxel.py | Aplikasi paling sederhana | Demo | Kode |
02_jump_game.py | Lompat Game dengan File Sumber Daya Pyxel | Demo | Kode |
03_draw_api.py | Demonstrasi Menggambar API | Demo | Kode |
04_sound_api.py | Demonstrasi API Suara | Demo | Kode |
05_color_palette.py | Daftar Palet Warna | Demo | Kode |
06_click_game.py | Game klik mouse | Demo | Kode |
07_snake.py | Game ular dengan BGM | Demo | Kode |
08_triatange_api.py | Demonstrasi API gambar segitiga | Demo | Kode |
09_shooter.py | Shoot'em Up Game dengan transisi layar | Demo | Kode |
10_platformer.py | Game platform gulir samping dengan peta | Demo | Kode |
11_offscreen.py | Rendering offscreen dengan kelas gambar | Demo | Kode |
12_perlin_noise.py | Perlin Noise Animation | Demo | Kode |
13_bitmap_font.py | Menggambar font bitmap | Demo | Kode |
14_synthesizer.py | Synthesizer menggunakan fitur ekspansi audio | Demo | Kode |
15_tiled_map_file.py | Memuat dan menggambar file peta ubin (.tmx) | Demo | Kode |
16_transform.py | Rotasi dan penskalaan gambar | Demo | Kode |
99_flip_animation.py | Animasi dengan Fungsi Flip (hanya platform non-Web) | Demo | Kode |
30sec_of_daylight.pyxapp | Pertandingan kemenangan kemenangan Pyxel 1 oleh Adam | Demo | Kode |
Megaball.pyxapp | Game Fisika Bola Arcade oleh Adam | Demo | Kode |
8bit-bgm-gen.pyxapp | Generator musik latar oleh Frenchbread | Demo | Kode |
Contohnya dapat dieksekusi dengan perintah berikut:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
Dalam skrip Python Anda, impor modul pyxel, tentukan ukuran jendela dengan fungsi init
, dan kemudian mulai aplikasi pyxel dengan fungsi run
.
import pyxel
pyxel . init ( 160 , 120 )
def update ():
if pyxel . btnp ( pyxel . KEY_Q ):
pyxel . quit ()
def draw ():
pyxel . cls ( 0 )
pyxel . rect ( 10 , 10 , 20 , 20 , 11 )
pyxel . run ( update , draw )
Argumen dari fungsi run
adalah fungsi update
, yang memproses bingkai pembaruan, dan fungsi draw
, yang menangani gambar layar.
Dalam aplikasi yang sebenarnya, disarankan untuk membungkus kode pyxel di kelas, seperti yang ditunjukkan di bawah ini:
import pyxel
class App :
def __init__ ( self ):
pyxel . init ( 160 , 120 )
self . x = 0
pyxel . run ( self . update , self . draw )
def update ( self ):
self . x = ( self . x + 1 ) % pyxel . width
def draw ( self ):
pyxel . cls ( 0 )
pyxel . rect ( self . x , 0 , 8 , 8 , 9 )
App ()
Untuk membuat grafik sederhana tanpa animasi, Anda dapat menggunakan fungsi show
untuk menyederhanakan kode Anda.
import pyxel
pyxel . init ( 120 , 120 )
pyxel . cls ( 1 )
pyxel . circb ( 60 , 60 , 40 , 7 )
pyxel . show ()
Skrip yang dibuat dapat dieksekusi menggunakan perintah python
:
python PYTHON_SCRIPT_FILE
Ini juga dapat dijalankan dengan perintah pyxel run
:
pyxel run PYTHON_SCRIPT_FILE
Selain itu, perintah pyxel watch
memonitor perubahan dalam direktori yang ditentukan dan secara otomatis menjalankan kembali program saat perubahan terdeteksi:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
Pemantauan direktori dapat dihentikan dengan menekan Ctrl(Command)+C
.
Tindakan kunci khusus berikut tersedia saat aplikasi Pyxel sedang berjalan:
Esc
Alt(Option)+1
Alt(Option)+2
Alt(Option)+3
Alt(Option)+8
atau A+B+X+Y+DL
pada gamepadAlt(Option)+9
atau A+B+X+Y+DR
pada gamepadAlt(Option)+0
atau A+B+X+Y+DU
di gamepadupdate
/ draw
)Alt(Option)+Enter
atau A+B+X+Y+DD
pada gamepadShift+Alt(Option)+1/2/3
Shift+Alt(Option)+0
Editor Pyxel dapat membuat gambar dan suara yang digunakan dalam aplikasi Pyxel.
Anda dapat memulai Pyxel Editor dengan perintah berikut:
pyxel edit PYXEL_RESOURCE_FILE
Jika file sumber daya pyxel yang ditentukan (.pyxres) ada, itu akan dimuat. Jika tidak ada, file baru dengan nama yang ditentukan akan dibuat. Jika file sumber daya dihilangkan, file baru bernama my_resource.pyxres
akan dibuat.
Setelah memulai Pyxel Editor, Anda dapat beralih ke file sumber daya lain dengan menyeret dan menjatuhkannya ke editor Pyxel.
File sumber daya yang dibuat dapat dimuat menggunakan fungsi load
.
Editor Pyxel memiliki mode pengeditan berikut.
Editor gambar
Mode untuk mengedit gambar di setiap bank gambar .
Anda dapat menyeret dan menjatuhkan file gambar (PNG/GIF/JPEG) ke editor gambar untuk memuat gambar ke dalam bank gambar yang saat ini dipilih.
Editor Tilemap
Mode untuk mengedit tilemaps yang mengatur gambar dari bank gambar dalam pola ubin.
Seret dan letakkan file TMX (file peta ubin) ke editor Tilemap untuk memuat lapisannya di urutan gambar yang sesuai dengan nomor Tilemap yang saat ini dipilih.
Editor Suara
Mode untuk mengedit suara yang digunakan untuk melodi dan efek suara.
Editor Musik
Mode untuk mengedit musik di mana suara diatur dalam urutan pemutaran.
Gambar pyxel dan tilemaps juga dapat dibuat menggunakan metode berikut:
Image.set
atau fungsi Tilemap.set
Image.load
Suara pyxel juga dapat dibuat menggunakan metode berikut:
Sound.set
atau fungsi Music.set
Lihat referensi API untuk penggunaan fungsi -fungsi ini.
Pyxel mendukung format file distribusi aplikasi khusus (file aplikasi pyxel) yaitu lintas platform.
File Aplikasi Pyxel (.pyxapp) dibuat menggunakan perintah pyxel package
:
pyxel package APP_DIR STARTUP_SCRIPT_FILE
Jika Anda perlu memasukkan sumber daya atau modul tambahan, tempatkan di direktori aplikasi.
Metadata dapat ditampilkan saat runtime dengan menentukannya dalam format berikut dalam skrip startup. Bidang selain title
dan author
adalah opsional.
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
File aplikasi yang dibuat dapat dijalankan menggunakan perintah pyxel play
:
pyxel play PYXEL_APP_FILE
File aplikasi Pyxel juga dapat dikonversi ke file yang dapat dieksekusi atau html menggunakan perintah pyxel app2exe
atau pyxel app2html
.
width
height
Lebar dan tinggi layar
frame_count
Jumlah bingkai yang berlalu
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Inisialisasi aplikasi pyxel dengan ukuran layar ( width
, height
). Opsi berikut dapat ditentukan: Judul jendela dengan title
, frame rate dengan fps
, kunci untuk keluar dari aplikasi dengan quit_key
, skala tampilan dengan display_scale
, skala tangkapan layar dengan capture_scale
, dan waktu perekaman maksimum dari tangkapan layar tangkapan layar dengan layar video dengan capture_sec
.
Contoh: pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
run(update, draw)
Mulai aplikasi Pyxel dan hubungi fungsi update
untuk pembaruan bingkai dan fungsi draw
untuk menggambar.
show()
Tunjukkan layar dan tunggu sampai tombol Esc
ditekan.
flip()
Segarkan layar dengan satu bingkai. Aplikasi keluar saat tombol Esc
ditekan. Fungsi ini tidak tersedia di versi web.
quit()
Keluar dari aplikasi Pyxel.
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Muat file sumber daya (.pyxres). Jika opsi diatur ke True
, sumber daya yang sesuai akan dikecualikan dari pemuatan. Jika file palet (.pyxpal) dengan nama yang sama ada di lokasi yang sama dengan file sumber daya, warna tampilan palet juga akan diperbarui. File palet berisi entri heksadesimal untuk warna tampilan (mis. 1100FF
), dipisahkan oleh Newline. File palet juga dapat digunakan untuk mengubah warna yang ditampilkan di Pyxel Editor.
user_data_dir(vendor_name, app_name)
Mengembalikan direktori data pengguna yang dibuat berdasarkan vendor_name
dan app_name
. Jika direktori tidak ada, itu akan dibuat secara otomatis. Ini digunakan untuk menyimpan skor tinggi, kemajuan permainan, dan data serupa.
Contoh: print(pyxel.user_data_dir("Takashi Kitao", "Pyxel Shooter"))
mouse_x
, mouse_y
Posisi kursor tikus saat ini
mouse_wheel
Nilai saat ini dari roda mouse
btn(key)
Kembalikan True
jika key
ditekan, jika tidak, kembalikan False
. (Daftar Definisi Kunci)
btnp(key, [hold], [repeat])
Kembalikan True
jika key
ditekan dalam bingkai itu, jika tidak, kembalikan False
. Jika hold
dan repeat
ditentukan, setelah key
ditahan untuk bingkai hold
atau lebih, True
dikembalikan setiap frame repeat
.
btnr(key)
Kembalikan True
jika key
dirilis dalam bingkai itu, jika tidak, kembalikan False
.
mouse(visible)
Tunjukkan kursor mouse jika visible
True
, dan sembunyikan jika visible
False
. Posisi kursor terus memperbarui bahkan ketika itu disembunyikan.
colors
Daftar warna tampilan palet. Warna tampilan ditentukan oleh nilai numerik 24-bit. Gunakan colors.from_list
dan colors.to_list
untuk langsung menetapkan dan mengambil daftar python.
Contoh: old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
images
Daftar Bank Gambar (contoh kelas gambar) (0-2)
Contoh: pyxel.images[0].load(0, 0, "title.png")
tilemaps
Daftar Tilemaps (contoh kelas Tilemap) (0-7)
clip(x, y, w, h)
Atur area gambar layar dari ( x
, y
) dengan lebar w
dan ketinggian h
. Call clip()
untuk mengatur ulang area gambar ke layar penuh.
camera(x, y)
Ubah koordinat sudut kiri atas layar menjadi ( x
, y
). Call camera()
Untuk mengatur ulang koordinat sudut kiri atas ke ( 0
, 0
).
pal(col1, col2)
Ganti Color col1
dengan col2
saat menggambar. Hubungi pal()
untuk mengatur ulang ke palet awal.
dither(alpha)
Terapkan tithering (pseudo-transparansi) saat menggambar. Atur alpha
dalam kisaran 0.0
- 1.0
, di mana 0.0
transparan dan 1.0
buram.
cls(col)
Layar yang jelas dengan Color col
pget(x, y)
Dapatkan warna piksel di ( x
, y
).
pset(x, y, col)
Gambarlah piksel col
warna di ( x
, y
).
line(x1, y1, x2, y2, col)
Gambarlah garis col
warna dari ( x1
, y1
) ke ( x2
, y2
).
rect(x, y, w, h, col)
Gambarlah persegi panjang lebar w
, tinggi h
dan col
warna dari ( x
, y
).
rectb(x, y, w, h, col)
Gambar garis persegi panjang lebar w
, tinggi h
dan col col
dari ( x
, y
).
circ(x, y, r, col)
Gambarlah lingkaran jari -jari r
dan warna col
di ( x
, y
).
circb(x, y, r, col)
Gambarkan garis lingkaran jari -jari r
dan Color col
di ( x
, y
).
elli(x, y, w, h, col)
Gambar elips lebar w
, tinggi h
dan col col
dari ( x
, y
).
ellib(x, y, w, h, col)
Gambarkan garis elips lebar w
, tinggi h
dan col col
dari ( x
, y
).
tri(x1, y1, x2, y2, x3, y3, col)
Gambar segitiga dengan simpul ( x1
, y1
), ( x2
, y2
), ( x3
, y3
) dan col col
.
trib(x1, y1, x2, y2, x3, y3, col)
Gambar garis segitiga dengan simpul ( x1
, y1
), ( x2
, y2
), ( x3
, y3
) dan col col
.
fill(x, y, col)
Isi area yang terhubung dengan warna yang sama seperti ( x
, y
) dengan warna col
.
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
Salin wilayah ukuran ( w
, h
) dari ( u
, v
) dari bank gambar img
(0-2) ke ( x
, y
). Jika nilai negatif ditugaskan ke w
dan/atau h
, wilayah tersebut akan dibalik secara horizontal dan/atau secara vertikal. Jika colkey
ditentukan, itu akan diperlakukan sebagai warna transparan. Jika rotate
(dalam derajat), scale
(1.0 = 100%), atau keduanya ditentukan, transformasi yang sesuai akan diterapkan.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
w
, h
) dari ( u
, v
) dari tilemap tm
(0-7) ke ( x
, y
). Jika nilai negatif ditugaskan ke w
dan/atau h
, wilayah tersebut akan dibalik secara horizontal dan/atau secara vertikal. Jika colkey
ditentukan, itu akan diperlakukan sebagai warna transparan. Jika rotate
(dalam derajat), scale
(1.0 = 100%), atau keduanya ditentukan, transformasi yang sesuai akan diterapkan. Ukuran ubin adalah 8x8 piksel dan disimpan dalam tilemap sebagai tuple dari (image_tx, image_ty)
. text(x, y, s, col)
s
dalam warna col
di ( x
, y
). sounds
Daftar Suara (Instances of the Sound Class) (0-63)
Contoh: pyxel.sounds[0].speed = 60
musics
Daftar MUSIC (Contoh Kelas Musik) (0-7)
play(ch, snd, [tick], [loop], [resume])
Mainkan Sound snd
(0-63) di Channel ch
(0-3). Jika snd
adalah daftar, suara akan diputar secara berurutan. Posisi mulai pemutaran dapat ditentukan dengan tick
(1 centang = 1/120 detik). Jika loop
diatur ke True
, pemutaran loop dilakukan. Untuk melanjutkan suara sebelumnya setelah pemutaran berakhir, atur resume
ke True
.
playm(msc, [tick], [loop])
Mainkan musik msc
(0-7). Posisi mulai pemutaran dapat ditentukan dengan tick
(1 centang = 1/120 detik). Jika loop
diatur ke True
, pemutaran loop dilakukan.
stop([ch])
Hentikan pemutaran saluran yang ditentukan ch
(0-3). Hubungi stop()
untuk menghentikan semua saluran.
play_pos(ch)
Dapatkan posisi pemutaran suara Channel ch
(0-3) sebagai tuple dari (sound_no, note_no)
. Return None
saat pemutaran berhenti.
ceil(x)
Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan x
.
floor(x)
Mengembalikan bilangan bulat terbesar yang kurang dari atau sama dengan x
.
sgn(x)
Kembali 1
saat x
positif, 0
saat itu 0
, dan -1
saat negatif.
sqrt(x)
Kembalikan akar kuadrat x
.
sin(deg)
Kembalikan sinus derajat deg
.
cos(deg)
Kembalikan cosinus derajat deg
.
atan2(y, x)
Kembalikan gesit y
/ x
dalam derajat.
rseed(seed)
Mengatur benih generator angka acak.
rndi(a, b)
Mengembalikan bilangan bulat acak lebih besar dari atau sama dengan a
dan kurang dari atau sama dengan b
.
rndf(a, b)
Mengembalikan bilangan titik mengambang acak lebih besar dari atau sama dengan a
dan kurang dari atau sama dengan b
.
nseed(seed)
Atur benih kebisingan Perlin.
noise(x, [y], [z])
Mengembalikan nilai noise perlin untuk koordinat yang ditentukan.
width
height
Lebar dan tinggi gambar
set(x, y, data)
Atur gambar di ( x
, y
) menggunakan daftar string.
Contoh: pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
load(x, y, filename)
Muat file gambar (png/gif/jpeg) di ( x
, y
).
pget(x, y)
Dapatkan warna piksel di ( x
, y
).
pset(x, y, col)
Gambarlah piksel dengan col
warna di ( x
, y
).
width
height
Lebar dan tinggi tilemap
imgsrc
Bank Gambar (0-2) yang dirujuk oleh Tilemap
set(x, y, data)
Atur tilemap di ( x
, y
) menggunakan daftar string.
Contoh: pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
load(x, y, filename, layer)
Muat lapisan di layer
pesanan gambar (0-) dari file TMX (file peta ubin) di ( x
, y
).
pget(x, y)
Dapatkan ubin di ( x
, y
). Ubin direpresentasikan sebagai tuple dari (image_tx, image_ty)
.
pset(x, y, tile)
Gambar tile
di ( x
, y
). Ubin direpresentasikan sebagai tuple dari (image_tx, image_ty)
.
notes
Daftar Catatan (0-127). Semakin tinggi angkanya, semakin tinggi lapangan. Catatan 33
sesuai dengan 'A2' (440Hz). Catatan istirahat diwakili oleh -1
.
tones
Daftar nada (0: segitiga / 1: persegi / 2: pulsa / 3: noise)
volumes
Daftar Volume (0-7)
effects
Daftar Efek (0: Tidak Ada / 1: Slide / 2: Vibrato / 3: Fadeout / 4: Half-Fadeout / 5: Quarter-Fadeout)
speed
Kecepatan pemutaran. 1
adalah yang tercepat, dan semakin besar jumlahnya, semakin lambat kecepatan pemutaran. Pada 120
, panjang satu nada menjadi 1 detik.
set(notes, tones, volumes, effects, speed)
Atur catatan, nada, volume, dan efek menggunakan string. Jika panjang nada, volume, atau efek lebih pendek dari catatan, mereka akan diulang dari awal.
set_notes(notes)
Atur catatan menggunakan string yang terbuat dari 'cdefgab'+'#-'+'01234' atau 'r'. Ini tidak sensitif, dan whitespace diabaikan.
Contoh: pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
set_tones(tones)
Atur nada dengan string yang terbuat dari 'TSPN'. Kasus-tidak sensitif dan spasi putih diabaikan.
Contoh: pyxel.sounds[0].set_tones("TTSS PPPN")
set_volumes(volumes)
Atur volume dengan string yang terbuat dari '01234567'. Kasus-tidak sensitif dan spasi putih diabaikan.
Contoh: pyxel.sounds[0].set_volumes("7777 7531")
set_effects(effects)
Atur efek dengan string yang terbuat dari 'NSVFHQ'. Kasus-tidak sensitif dan spasi putih diabaikan.
Contoh: pyxel.sounds[0].set_effects("NFNF NVVS")
seqs
Daftar suara dua dimensi (0-63) di beberapa saluran
set(seq0, seq1, seq2, ...)
Atur daftar suara (0-63) untuk setiap saluran. Jika daftar kosong ditentukan, saluran itu tidak akan digunakan untuk pemutaran.
Contoh: pyxel.musics[0].set([0, 1], [], [3])
Pyxel mencakup "API tingkat lanjut" yang tidak disebutkan dalam referensi ini, karena dapat membingungkan pengguna atau memerlukan pengetahuan khusus untuk digunakan.
Jika Anda yakin dengan keterampilan Anda, cobalah membuat karya luar biasa menggunakan ini sebagai panduan!
Gunakan pelacak masalah untuk mengirimkan laporan bug dan permintaan fitur atau peningkatan. Sebelum mengirimkan masalah baru, pastikan tidak ada masalah terbuka yang serupa.
Siapa pun yang secara manual menguji kode dan melaporkan bug atau saran untuk peningkatan dalam pelacak masalah sangat disambut!
Tambalan dan perbaikan diterima dalam bentuk permintaan tarik (PR). Pastikan masalah alamat permintaan tarik terbuka di pelacak masalah.
Mengirimkan permintaan tarik menyiratkan bahwa Anda setuju untuk melisensikan kontribusi Anda di bawah lisensi MIT.
Pyxel dilisensikan di bawah lisensi MIT. Ini dapat digunakan kembali dalam perangkat lunak berpemilik, asalkan semua salinan perangkat lunak atau porsi substansial termasuk salinan Ketentuan Lisensi MIT dan pemberitahuan hak cipta.
Pyxel sedang mencari sponsor pada sponsor GitHub. Harap pertimbangkan untuk mensponsori Pyxel untuk mendukung pemeliharaan dan pengembangan fitur yang berkelanjutan. Sebagai manfaat, sponsor dapat berkonsultasi langsung dengan pengembang Pyxel. Untuk detail lebih lanjut, silakan kunjungi halaman ini.