[英語| 中文|德意志| Español| Français| Italiano | 日本語| 한국어|葡萄牙| n Türkçe| ]
Pyxel是Python的複古遊戲引擎。
借助受復古遊戲機啟發的簡單規格,例如僅顯示16種顏色和支持4個聲音頻道,您可以輕鬆地享受製作Pixel-Art Style遊戲。
Pyxel的開發是由用戶反饋驅動的。請在Github上給Pyxel一顆星星!
Pyxel的規格和API受到PICO-8和TIC-80的啟發。
Pyxel是MIT許可證的開源,免費使用。讓我們開始使用Pyxel進行複古遊戲!
安裝Python3(版本3.8或更高版本)後,運行以下命令:
pip install -U pyxel
使用官方安裝程序安裝Python時,請確保檢查Add Python 3.x to PATH
選項以啟用pyxel
命令。
安裝自製後,運行以下命令:
brew install pipx
pipx ensurepath
pipx install pyxel
要在安裝後升級Pyxel,請運行pipx upgrade pyxel
。
安裝SDL2軟件包(ubuntu的libsdl2-dev
)後,Python3(版本3.8或更高版本)和python3-pip
,運行以下命令:
sudo pip3 install -U pyxel
如果以前的命令失敗,請按照makefile中的說明來考慮從源構建pyxel。
Pyxel的Web版本不需要Python或Pyxel安裝,並且可以在PC,智能手機和帶有支持的Web瀏覽器的平板電腦上運行。
有關詳細說明,請參閱此頁面。
安裝Pyxel後,您可以使用以下命令將示例複製到當前目錄:
pyxel copy_examples
以下示例將復製到您當前的目錄:
01_hello_pyxel.py | 最簡單的應用程序 | 演示 | 代碼 |
02_jump_game.py | 使用Pyxel資源文件跳躍遊戲 | 演示 | 代碼 |
03_draw_api.py | 繪畫API的演示 | 演示 | 代碼 |
04_sound_api.py | 演示聲音API | 演示 | 代碼 |
05_COLOR_PALETTE.PY | 調色板列表 | 演示 | 代碼 |
06_CLICK_GAME.PY | 鼠標點擊遊戲 | 演示 | 代碼 |
07_snake.py | BGM的蛇遊戲 | 演示 | 代碼 |
08_triangle_api.py | 三角繪圖API的演示 | 演示 | 代碼 |
09_shooter.py | 通過屏幕過渡拍攝遊戲 | 演示 | 代碼 |
10_platformer.py | 帶有地圖的側滾動平台遊戲 | 演示 | 代碼 |
11_OFFSCREEN.PY | 圖像類的屏幕外渲染 | 演示 | 代碼 |
12_perlin_noise.py | Perlin噪聲動畫 | 演示 | 代碼 |
13_BITMAP_FONT.PY | 繪製位圖字體 | 演示 | 代碼 |
14_synthesizer.py | 使用音頻擴展功能的合成器 | 演示 | 代碼 |
15_tiled_map_file.py | 加載和繪製圖塊地圖文件(.tmx) | 演示 | 代碼 |
16_transform.py | 圖像旋轉和縮放 | 演示 | 代碼 |
99_flip_animation.py | 具有翻轉功能的動畫(僅非WEB平台) | 演示 | 代碼 |
30sec_of_daylight.pyxapp | 亞當1st pyxel果醬贏得比賽 | 演示 | 代碼 |
megaball.pyxapp | 亞當的街機球物理遊戲 | 演示 | 代碼 |
8bit-bgm-gen.pyxapp | 法國麵包的背景音樂生成器 | 演示 | 代碼 |
可以使用以下命令執行示例:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
在您的Python腳本中,導入Pyxel模塊,使用init
函數指定窗口大小,然後使用run
函數啟動Pyxel應用程序。
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 )
run
函數的參數是update
函數,該功能處理框架更新和處理屏幕圖的draw
功能。
在實際應用中,建議將Pyxel代碼包裝在類中,如下所示:
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 ()
為了創建無動畫的簡單圖形,您可以使用show
功能簡化代碼。
import pyxel
pyxel . init ( 120 , 120 )
pyxel . cls ( 1 )
pyxel . circb ( 60 , 60 , 40 , 7 )
pyxel . show ()
可以使用python
命令執行創建的腳本:
python PYTHON_SCRIPT_FILE
它也可以使用pyxel run
命令運行:
pyxel run PYTHON_SCRIPT_FILE
此外, pyxel watch
命令監視指定目錄中的更改,並在檢測到更改時自動重新運行該程序:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
可以通過按Ctrl(Command)+C
來停止目錄監視。
在運行PYXEL應用程序時,可以使用以下特殊關鍵操作:
Esc
Alt(Option)+1
Alt(Option)+2
Alt(Option)+3
Alt(Option)+8
或A+B+X+Y+DL
在GamePad上Alt(Option)+9
或A+B+X+Y+DR
在GamePad上Alt(Option)+0
或A+B+X+Y+DU
在GamePad上update
時間/ draw
時間)Alt(Option)+Enter
或A+B+X+Y+DD
在GamePad上Shift+Alt(Option)+1/2/3
Shift+Alt(Option)+0
Pyxel編輯器可以創建Pyxel應用程序中使用的圖像和聲音。
您可以使用以下命令啟動Pyxel編輯器:
pyxel edit PYXEL_RESOURCE_FILE
如果存在指定的pyxel資源文件(.pyxres),則將加載它。如果不存在,將創建帶有指定名稱的新文件。如果省略了資源文件,將創建一個名為my_resource.pyxres
的新文件。
啟動Pyxel編輯器後,您可以通過將其拖動到Pyxel編輯器中切換到另一個資源文件。
可以使用load
函數加載創建的資源文件。
Pyxel編輯器具有以下編輯模式。
圖像編輯器
在每個圖像庫中編輯圖像的模式。
您可以將圖像文件(PNG/GIF/JPEG)拖放到圖像編輯器中,以將圖像加載到當前選擇的圖像庫中。
TILEMAP編輯
編輯tilemaps的模式,該模式以瓷磚模式排列圖像的圖像。
將TMX文件(瓷磚地圖文件)拖放到TILEMAP編輯器上,以將其圖層加載在與當前選擇的TILEMAP號相對應的圖表中。
聲音編輯器
用於旋律和聲音效果的編輯聲音的模式。
音樂編輯
編輯音樂的模式,其中按播放順序排列聲音。
也可以使用以下方法創建Pyxel圖像和TILEMAPS:
Image.set
函數或Tilemap.set
函數從字符串列表中創建圖像Image.load
調色板中的圖像文件(PNG/GIF/JPEG)帶有圖像。也可以使用以下方法創建Pyxel聲音:
Sound.set
函數或Music.set
創建聲音有關這些功能的使用,請參閱API參考。
Pyxel支持跨平台的專用應用程序分發文件格式(PYXEL應用程序文件)。
使用pyxel package
命令創建PYXEL應用程序文件(.pyxapp):
pyxel package APP_DIR STARTUP_SCRIPT_FILE
如果您需要包括資源或其他模塊,請將它們放入應用程序目錄中。
可以在啟動腳本中以以下格式指定元時間在運行時顯示元數據。除title
和author
以外的其他字段是可選的。
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
可以使用pyxel play
命令運行創建的應用程序文件:
pyxel play PYXEL_APP_FILE
PYXEL應用程序文件也可以使用pyxel app2exe
或pyxel app2html
命令轉換為可執行文件或HTML文件。
width
, height
屏幕的寬度和高度
frame_count
經過的幀數
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
用屏幕尺寸( width
, height
)初始化Pyxel應用程序。可以指定以下選項:帶title
的窗口標題,帶有fps
幀速率,使用quit_key
退出應用程序的鑰匙,帶有display_scale
的顯示量表,帶有capture_scale
屏幕捕獲比例以及屏幕截圖的最大記錄時間帶有capture_sec
的視頻。
示例: pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
run(update, draw)
啟動pyxel應用程序,然後調用update
功能以進行幀更新和繪圖的draw
功能。
show()
顯示屏幕並等到按下Esc
鍵。
flip()
用一個框架刷新屏幕。按下Esc
鍵時,該應用程序將退出。此功能在Web版本中不可用。
quit()
退出Pyxel應用程序。
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
加載資源文件(.pyxres)。如果將選項設置為True
,則相應的資源將被排除在加載之外。如果具有相同名稱的調色板文件(.pyxpal)與資源文件相同的位置存在,則調色板顯示顏色也將更新。調色板文件包含顯示顏色的十六進制條目(例如1100FF
),並由新線隔開。調色板文件也可用於更改Pyxel編輯器中顯示的顏色。
user_data_dir(vendor_name, app_name)
返回基於vendor_name
和app_name
創建的用戶數據目錄。如果目錄不存在,它將自動創建。它用於存儲高分,遊戲進度和類似數據。
示例: print(pyxel.user_data_dir("Takashi Kitao", "Pyxel Shooter"))
mouse_x
, mouse_y
鼠標光標的當前位置
mouse_wheel
鼠標車輪的當前值
btn(key)
如果按下key
,則返回True
,否則返回False
。 (關鍵定義列表)
btnp(key, [hold], [repeat])
如果將key
按在該框架中,則返回True
,否則返回False
。如果指定了hold
和repeat
,則在hold
鍵或以上的key
後,將返回每個repeat
幀的True
。
btnr(key)
如果key
在該框架中釋放,則返回True
,否則返回False
。
mouse(visible)
顯示鼠標光標,如果visible
為True
,如果visible
為False
則將其隱藏。光標的位置即使隱藏了,也會繼續更新。
colors
調色板列表顯示顏色。顯示顏色由24位數值指定。使用colors.from_list
和colors.to_list
直接分配和檢索python列表。
示例: old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
images
圖像庫列表(圖像類的實例)(0-2)
示例: pyxel.images[0].load(0, 0, "title.png")
tilemaps
TILEMAPS(TILEMAP類的實例)(0-7)列表(0-7)
clip(x, y, w, h)
將屏幕的繪圖區域從( x
, y
)的寬度寬為w
,高度為h
。致電clip()
將繪圖區域重置為全屏。
camera(x, y)
將屏幕的左上角坐標更改為( x
, y
)。調用0
camera()
將左上角坐標重置為( 0
)。
pal(col1, col2)
繪圖時用col2
替換顏色col1
。致電pal()
重置為初始調色板。
dither(alpha)
繪製時,應用抖動(偽透明度)。將alpha
設置為0.0
1.0
範圍,其中0.0
是透明的,而1.0
是不透明的。
cls(col)
帶有col
的清除屏幕。
pget(x, y)
在( x
, y
)處獲取像素的顏色。
pset(x, y, col)
在( x
, y
)上畫一個彩色col
的像素。
line(x1, y1, x2, y2, col)
從( x1
, y1
)到( x2
, y2
)繪製一條彩色col
線。
rect(x, y, w, h, col)
從( x
, y
)繪製寬度w
,高度h
和顏色col
的矩形。
rectb(x, y, w, h, col)
從( x
, y
)繪製寬度w
,高度h
和彩色col
的矩形的輪廓。
circ(x, y, r, col)
在( x
, y
)處繪製一個半徑為r
和彩色col
。
circb(x, y, r, col)
在( x
, y
)處繪製半徑為r
和彩色col
的圓的輪廓。
elli(x, y, w, h, col)
從( x
, y
)繪製寬度w
,高度h
和顏色col
的橢圓。
ellib(x, y, w, h, col)
從( x
, y
)繪製寬度w
,高度h
和顏色col
的橢圓的輪廓。
tri(x1, y1, x2, y2, x3, y3, col)
用頂點( x1
, y1
),( x2
, y2
),( x3
, y3
)和col
繪製三角形。
trib(x1, y1, x2, y2, x3, y3, col)
用頂點( x1
, y1
),( x2
, y2
),( x3
, y3
)和col
繪製三角形的輪廓。
fill(x, y, col)
用與( x
, y
)相同的顏色連接的區域用顏色col
。
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
將圖像庫img
(0-2)的( u
, v
)的大小( w
, h
)區域複製到( x
, y
)。如果將負值分配給w
和/或h
,則該區域將水平和/或垂直撥動。如果指定了colkey
,它將被視為透明的顏色。如果rotate
(以度為單位),則scale
(1.0 = 100%),或者兩者都被指定,則將應用相應的轉換。
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
w
, h
)的區域從tilemap tm
(0-7)的( u
, v
)複製到( x
, y
)。如果將負值分配給w
和/或h
,則該區域將水平和/或垂直撥動。如果指定了colkey
,它將被視為透明的顏色。如果rotate
(以度為單位),則scale
(1.0 = 100%),或者兩者都被指定,則將應用相應的轉換。瓷磚的大小為8x8像素,並將其存儲在tilemap中,作為元組(image_tx, image_ty)
。 text(x, y, s, col)
x
, y
)上繪製顏色col
中的s
。sounds
聲音列表(聲音類的實例)(0-63)
示例: pyxel.sounds[0].speed = 60
musics
音樂列表(音樂課的實例)(0-7)
play(ch, snd, [tick], [loop], [resume])
在通道ch
(0-3)上播放聲音snd
(0-63)。如果snd
是列表,則聲音將按順序播放。可以通過tick
(1 tick = 1/120秒)指定播放開始位置。如果loop
設置為True
,則執行循環播放。要在播放結束後恢復以前的聲音,請將resume
設置為True
。
playm(msc, [tick], [loop])
播放音樂msc
(0-7)。可以通過tick
(1 tick = 1/120秒)指定播放開始位置。如果loop
設置為True
,則執行循環播放。
stop([ch])
停止指定通道ch
(0-3)的播放。致電stop()
停止所有通道。
play_pos(ch)
將通道ch
(0-3)的聲音播放位置作為(sound_no, note_no)
的元組。播放停止後, None
。
ceil(x)
返回大於或等於x
最小整數。
floor(x)
返回小於或等於x
最大整數。
sgn(x)
當x
為正時,返回1
時,為0
0
當x為負時-1時為-1
。
sqrt(x)
返回x
的平方根。
sin(deg)
返回deg
度的正弦。
cos(deg)
返回deg
度的餘弦。
atan2(y, x)
返回y
/ x
的北方人。
rseed(seed)
設置隨機數發生器的種子。
rndi(a, b)
返回大於或等於a
隨機整數,小於或等於b
。
rndf(a, b)
返回大於或等於a
隨機浮點數,小於或等於b
。
nseed(seed)
設置Perlin噪聲的種子。
noise(x, [y], [z])
返回指定坐標的perlin噪聲值。
width
, height
圖像的寬度和高度
set(x, y, data)
使用字符串列表將圖像設置為( x
, y
)。
示例: pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
load(x, y, filename)
在( x
, y
)上加載圖像文件(png/gif/jpeg)。
pget(x, y)
在( x
, y
)處獲取像素的顏色。
pset(x, y, col)
在( x
, y
)上繪製帶有顏色col
的像素。
width
, height
TileMap的寬度和高度
imgsrc
圖像庫(0-2)由TILEMAP引用
set(x, y, data)
使用字符串列表將TILEMAP設置為( x
, y
)。
示例: pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
load(x, y, filename, layer)
在( x
, y
)的TMX文件(瓷磚地圖文件)中加載圖層(0-)中的layer
(0-)。
pget(x, y)
在( x
, y
)上獲取瓷磚。瓷磚表示為(image_tx, image_ty)
的元組。
pset(x, y, tile)
在( x
, y
)上畫一個tile
。瓷磚表示為(image_tx, image_ty)
的元組。
notes
筆記清單(0-127)。數字越高,音高越高。注33
對應於“ A2”(440Hz)。休息筆記由-1
表示。
tones
音調列表(0:三角 / 1:正方形 / 2:脈衝 / 3:噪聲)
volumes
卷列表(0-7)
effects
效果列表(0:無 / 1:幻燈片 / 2:Vibrato / 3:vadeout / 4:半拋棄 / 5:四分之一fadeout)
speed
播放速度。 1
是最快的,數字越大,播放速度越慢。在120
時,一個音符的長度變為1秒。
set(notes, tones, volumes, effects, speed)
使用字符串設置音符,音調,捲和效果。如果音調,體積或效果的長度比音符短,則從一開始就會重複。
set_notes(notes)
使用由“ cdefgab”+'# - '+'01234'或'r'製成的字符串設置音符。它是不敏感的,而空格被忽略。
示例: pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
set_tones(tones)
用“ TSPN”製成的字符串設置音調。案例不敏感的和白色的空間被忽略。
示例: pyxel.sounds[0].set_tones("TTSS PPPN")
set_volumes(volumes)
用由“ 01234567”製成的字符串設置卷。案例不敏感的和白色的空間被忽略。
示例: pyxel.sounds[0].set_volumes("7777 7531")
set_effects(effects)
用“ NSVFHQ”製成的字符串設置效果。案例不敏感的和白色的空間被忽略。
示例: pyxel.sounds[0].set_effects("NFNF NVVS")
seqs
跨多個頻道的二維聲音列表(0-63)
set(seq0, seq1, seq2, ...)
為每個通道設置聲音列表(0-63)。如果指定了一個空列表,則該頻道將不會用於播放。
示例: pyxel.musics[0].set([0, 1], [], [3])
PYXEL包括此參考文獻中未提及的“高級API”,因為它可能會混淆用戶或需要使用專業知識。
如果您對自己的技能充滿信心,請嘗試以此為指導創作出色的作品!
使用問題跟踪器提交錯誤報告以及功能或增強請求。在提交新問題之前,請確保沒有類似的開放問題。
任何手動測試代碼並報告問題跟踪器增強功能的錯誤或建議的人都非常歡迎!
補丁和修復程序以拉動請求(PR)的形式接受。確保問題在“問題跟踪器”中打開。
提交拉的請求意味著您同意根據MIT許可證許可您的捐款。
Pyxel已獲得MIT許可證的許可。它可以在專有軟件中重複使用,前提是軟件的所有副本或其大量部分包括MIT許可條款的副本和版權通知。
Pyxel正在GitHub贊助商上尋找贊助商。請考慮贊助Pyxel,以支持其持續的維護和功能開發。作為好處,贊助商可以直接與Pyxel開發人員進行諮詢。有關更多詳細信息,請訪問此頁面。