python的复古游戏引擎
pyxel的Python项目详细描述
pyxel是python的复古游戏引擎。
得益于复古游戏机启发的简单规格,例如只能显示16种颜色,同时只能播放4种声音,您可以尽情享受制作像素艺术风格的游戏。
Pyxel游戏机、API和调色板的规格是指Awesomepico-8和tic-80
pyxel是开源的,可以免费使用。让我们开始做一个复古游戏与紫杉醇!
规格
- 在Windows、Mac和Linux上运行
- 用python3编写代码
- 固定16色调色板
- 256x256大小3个图像库
- 256x256大小8 tileMaps
- 4个频道,64个可定义的声音
- 8首可以任意组合的音乐NDS
- 键盘、鼠标和游戏板输入
- 图像和声音编辑器
调色板
如何安装
窗口
在安装python3(3.7或更高版本)之后,下面的pip
命令将安装pyxel:
pip install -U pyxel
MAC
在安装python3(3.7版或更高版本)和sdl2之后,使用pip
命令安装pyxel。
如果自制软件包管理器已就绪,则以下命令将安装所有必需的软件包:
brew install python3 sdl2 sdl2_image pip3 install -U pyxel
Linux
以适合每个发行版的方式安装python3(3.7或更高版本)和所需的包。
ubuntu:
sudo apt install python3 python3-pip libsdl2-dev libsdl2-image-dev sudo pip3 install -U pyxel
其他环境
要在上述环境(32位Linux、覆盆子PI等)之外的环境中安装Pyxel,请按照以下步骤进行构建:
安装必要的工具和软件包
C++构建工具链(应该包括GCC和make命令)- libsdl2 dev和libsdl2 image dev
- python3(3.7或更高版本)和pip命令
在任何文件夹中执行以下命令
git clone https://github.com/kitao/pyxel.git
cd pyxel
make -C pyxel/core clean all
pip3 install .
安装示例
安装pyxel后,pyxel的示例将使用以下命令复制到当前目录:
install_pyxel_examples
要复制的示例如下:
- 01戋hello戋pyxel.py-最简单的应用程序
- 02_jump_game.py-使用pyxel资源文件的跳转游戏
- 03_draw_api.py-drawig api演示
- 04戋sound戋api.py-演示sound api
- 05撸color撸palete.py-调色板列表
- 06_click_game.py-鼠标点击游戏
- 07撸snake.py-带BGM的蛇游戏
这些示例可以像普通的python代码一样执行:
窗口:
cd pyxel_examples
python 01_hello_pyxel.py
Mac/Linux:
cd pyxel_examples
python3 01_hello_pyxel.py
如何使用
创建pyxel应用程序
在python代码中导入pyxel模块后,首先使用init
函数指定窗口大小,然后使用run
函数启动pyxel应用程序。
importpyxelpyxel.init(160,120)defupdate():ifpyxel.btnp(pyxel.KEY_Q):pyxel.quit()defdraw():pyxel.cls(0)pyxel.rect(10,10,20,20,11)pyxel.run(update,draw)
run
函数的参数是update
函数,用于更新每个帧,并在必要时draw
函数用于绘制屏幕。
在实际的应用程序中,建议将pyxel代码包装在一个类中,如下所示:
importpyxelclassApp:def__init__(self):pyxel.init(160,120)self.x=0pyxel.run(self.update,self.draw)defupdate(self):self.x=(self.x+1)%pyxel.widthdefdraw(self):pyxel.cls(0)pyxel.rect(self.x,0,8,8,9)App()
也可以使用show
和flip
函数编写简单的代码来绘制简单的图形和动画。
show
功能将显示屏幕,并等待按下esc
键。
pip install -U pyxel0
翻转功能更新屏幕一次。
pip install -U pyxel1
特殊控制
当Pyxel应用程序运行时,可以执行以下特殊控件:
esc
退出应用程序alt(选项)+1
将屏幕截图保存到桌面alt(选项)+2
重置屏幕捕获视频的录制开始时间alt(选项)+3
将屏幕捕获视频(gif)保存到桌面(最长30秒)alt(选项)+0
切换性能监视器(fps、更新时间和绘图时间)alt(选项)+输入 全屏切换
如何创建资源
附加的Pyxel编辑器可以创建Pyxel应用程序中使用的图像和声音。
pyxel编辑器从以下命令开始:
pip install -U pyxel2
如果指定的pyxel资源文件(.pyxres)存在,则加载该文件;如果该文件不存在,则使用指定的名称创建新文件。
如果省略资源文件,则名称为my_resource.pyxres
启动Pyxel编辑器后,可以通过拖放另一个资源文件来切换文件。
创建的资源文件可以用load
函数加载。
pyxel编辑器有以下编辑模式。
图像编辑器:
编辑图像库的模式。
通过将PNG文件拖放到图像编辑器屏幕上,可以将图像加载到当前选定的图像库中。
tilemap编辑器:
编辑tileMaps的模式,其中图像库的图像以平铺模式排列。
声音编辑器:
编辑声音的模式。
音乐编辑器:
按播放顺序排列声音的音乐编辑模式。
其他资源创建方法
pyxel图像和tilemaps也可以通过以下方式创建:
- 使用
image.set
或tilemap.set
函数从字符串列表中创建图像 - 使用
image.load
函数在Pyxel调色板中加载PNG文件
由于Pyxel使用与pico-8相同的调色板,因此在为Pyxel创建PNG图像时,建议在pico-8调色板模式下使用aprite。
pyxel声音也可以通过以下方式创建:
- 使用
sound.set
或music.set
函数从字符串中创建声音
有关这些函数的用法,请参阅API参考资料。
如何创建独立可执行文件
通过使用附加的pyxel打包程序,一个独立的可执行文件即使在没有安装python的环境中也可以创建。
要创建独立的可执行文件,请使用pyxelpackager
命令指定用于启动应用程序的python文件,如下所示:
pip install -U pyxel3
过程完成后,将在dist
文件夹中创建一个独立的可执行文件。
如果还需要.pyxres和.png文件等资源,请将它们放在assets
文件夹下,并将其包括在内。
API参考
系统
宽度
,高度
屏幕的宽度和高度帧计数
经过的帧数init(宽度、高度、[caption]、[scale]、[palette]、[fps]、[border-width]、[border-color])
使用屏幕大小(宽度
,高度
)初始化pyxel应用程序。屏幕的最大宽度和高度为256
也可以用标题指定窗口标题,用
比例指定显示放大倍数,用
调色板指定调色板颜色,用
fps指定帧率,用
边框和
指定屏幕外的边距宽度和颜色。>边框颜色
。调色板
指定为16个24位颜色元素的列表,边框颜色
指定为24位颜色运行(更新,绘制)
启动pyxel应用程序并调用update
函数进行帧更新,调用draw
函数进行绘制退出()
在当前帧结束时退出pyxel应用程序flip()
强制绘制屏幕(不要在正常应用中使用)show()
绘制屏幕并一直等待(不要在正常应用程序中使用)
资源
保存(文件名)
将资源文件(.pyxres)保存到执行脚本的目录中加载(文件名)
从执行脚本的目录中读取资源文件(.pyxres)
输入
鼠标x
,鼠标y
鼠标光标的当前位置btn(键)
如果按了键,则返回true,否则返回falsebtnp(键,[保持],[周期])
如果在该帧按下键,则返回
true,否则返回
false。当指定了
hold
和period
时,当键被按住超过
hold
帧时,将在period
帧间隔返回true
。btnr(键)
如果在该帧处释放了键,则返回true,否则返回
false
鼠标(可见)
如果visible
是true
,则显示鼠标光标。如果false
,请将其隐藏。即使没有显示鼠标光标,其位置也会更新。
图形
图像(img,[系统])
操作图像库img
(0-2)(参见图像类)。如果系统为
真,则可以访问系统的图像库。3用于字体和资源编辑器。4用于显示屏
例如pyxel.image(0).load(0,0,"title.png")
tilemap(tm)
操作tilemaptm
(0-7)(参见tilemap类)
将绘图区域重置为全屏剪辑(x,y,w,h)
将屏幕的绘图区域从(x
,y
)设置为widthw
和heighth
. 使用clip()
pal(col1,col2)
在绘图时将colorcol1
替换为col2
。pal()
重置为初始调色板cls(col)
用颜色清除屏幕像素(x,y,col)
在(x
,y
)处绘制颜色像素行(x1,y1,x2,y2,col)
从(x1
,y1
)到(x2
,y2
)绘制一条颜色线矩形(x,y,w,h,col)
从(x
,y
)绘制一个宽度w
、高度h
和颜色col
的矩形矩形(x,y,w,h,col)
从(x
,y
)绘制宽度w
、高度h
和颜色col
的矩形轮廓循环(x,y,r,col)
在(x
,y
)处画一个半径r
和颜色col
的圆循环(x,y,r,col)
在(x
,y
)处绘制半径r
和颜色col
的圆的轮廓blt(x,y,img,u,v,w,h,[colkey])
将大小区域(w
,h
)从图像库的(u
,v
)复制到(x
,y
)。如果为w
和/或h
设置负值,它将水平和/或垂直反转。如果指定了COLKEY,则视为透明色bltm(x,y,tm,u,v,w,h,[colkey])
根据尺寸信息(w
,h
)从(u
,v
)绘制tileMapTM
(0-7)到(x
,y
)。如果指定了COLKEY,则视为透明色。以8x8的大小绘制tilemap的平铺,如果平铺号为0,则表示图像库的区域(0,0)-(7,7),如果为1,则表示(8,0)-(15,0)文本(x,y,s,col)
在(x
,y
)处绘制颜色col
的字符串s
。
音频
声音(snd,[系统])
操作声音snd
(0-63)(参见声音类)。如果系统
为真
,则可以访问系统的声音64
例如pyxel.sound(0.speed=60
音乐(理学硕士)
操作音乐msc
(0-7)(请参见音乐类)播放POS(ch)
获取通道ch的声音播放位置。100和1000表示音号,1和10表示音符号。停止播放时,返回-1
播放(ch,snd,loop=false)
在频道上播放声音snd
(0-63)。当snd
是列表时按顺序播放playm(msc,loop=false)
播放音乐msc
(0-7)停止([ch])
停止播放所有频道。如果指定了ch
(0-3),则仅停止相应的频道
图像类
宽度
,高度
图像的宽度和高度数据
图像数据(256x256二维列表)获取(x,y)
在(x
,y
)检索图像数据设置(x,y,数据)
将图像的数据设置为(x
,y
)的值或字符串列表
例如,pyxel.image(0).set(10,10,["1234","5678","9ABC","defg"])
加载(x,y,文件名)
从执行脚本的目录中读取png图像(x
,y
)复制(x,y,img,u,v,w,h)
将大小区域(w
,h
)从图像库的(u
,v
)复制到(x
,y
)
tilemap类
宽度
,高度
tilemap的宽度和高度数据
tilemap的数据(256x256二维列表)重新加注
tilemap引用的图像库获取(x,y)
检索tilemap的数据(x
,y
)设置(x,y,数据)
通过值或字符串列表将tilemap的数据设置为(x
,y
)。 例如pyxel.tilemap(0).set(0,0,["000102","202122","a0a1a2","b0b1b2"])
复制(x,y,tm,u,v,w,h)
将tilemaptm
(0-7)的大小区域(w
,v
)复制到(x
,y
)
声音等级
注意
注释列表(0-127)(33='A2'=440Hz)音调
音调列表(0:三角形/1:正方形/2:脉冲/3:噪声)音量
音量列表(0-7)效果
效果列表(0:无/1:幻灯片/2:振动/3:淡出)速度
一个音符的长度(120=1秒/音)设置(音符、音调、音量、效果、速度)
用字符串设置音符、音调、音量和效果。如果音调、音量和效果长度短于音符,则从头开始重复此过程设置注释(注释)
用"cdefgab"+"-"+"0123"或"r"组成的字符串设置注释。不区分大小写,忽略空白
例如pyxel.sound(0).set_note("g2b-2d3r rf3f3f3")
设置音调(音调)
用"tspn"组成的字符串设置音调。不区分大小写,忽略空白
例如pyxel.sound(0).set_tone("ttss pppn")
设置音量(音量)
使用由"01234567"组成的字符串设置卷。不区分大小写,忽略空白
例如pyxel.sound(0).设置音量("77777531")
设置效果(效果)
用"nsvf"字符串设置效果。不区分大小写,忽略空白
例如pyxel.sound(0).set_effect("NFNF NVV")
音乐课
ch0
频道0上播放的声音列表(0-63)。如果指定了空列表,则该频道不用于播放ch1
频道1上播放的声音列表(0-63)。如果指定了空列表,则该频道不用于播放ch2
频道2上播放的声音列表(0-63)。如果指定了空列表,则该频道不用于播放ch3
频道3上播放的声音列表(0-63)。如果指定了空列表,则该频道不用于播放设置(ch0,ch1,ch2,ch3)
设置所有频道的声音列表(0-63)。如果指定了空列表,则该频道不用于播放
例如pyxel.music(0).set([0,1],[2,3],[4],])
设置ch0(数据)
设置频道0的声音列表(0-63)设置ch1(数据)
设置声道1的声音列表(0-63)设置CH2(数据)
设置声道2的声音列表(0-63)设置CH3(数据)
设置声道3的声音列表(0-63)
如何贡献
提交问题
使用问题跟踪器提交错误报告和功能/增强请求。 在提交新问题之前,请搜索问题跟踪程序以确保没有类似的未决问题。
提交报告时,请从该链接中选择适当的模板。
手动测试
任何人手动测试代码和报告错误或建议的问题跟踪器增强是非常欢迎的!
提交拉取请求
补丁/修复以请求请求(prs)的形式被接受。确保问题"问题跟踪程序"中的"拉取请求地址"已打开。
提交的请求被视为同意在麻省理工学院许可证下发布。
其他信息
许可证
Pyxel位于麻省理工学院许可证下。只要许可软件的所有副本包括麻省理工学院许可条款和版权声明的副本,就可以在专有软件中重复使用。
Pyxel使用以下库: