[英语| 中文|德意志| 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开发人员进行咨询。有关更多详细信息,请访问此页面。