4 个版本
使用旧的 Rust 2015
0.0.4 | 2017年7月14日 |
---|---|
0.0.3 | 2017年5月12日 |
0.0.2 | 2017年1月25日 |
0.0.1 | 2017年1月10日 |
#1449 in 开发工具
2.5MB
15K SLoC
PX8
PX8 是一个开源幻想游戏机(默认分辨率为 128x128 像素),在 Rust 中使用包含代码/gfx/音乐的卡带。代码可以是 Python/Lua,或者您可以直接使用它作为库在纯 Rust 中创建所有内容。
- 128x128 像素默认分辨率
- 预定义调色板(pico-8、c64 等)
- 支持卡带,没有令牌限制的 Python 3 / Lua 5.X
- 桌面/移动/浏览器(Emscripten)支持
- dpad + 2 个按钮的控件(支持游戏手柄/操纵杆)
- 无限精灵(8x8)
- 地图支持(128x32)
- 精灵和地图数据的编辑器
- PX8 格式,以便您可以使用喜欢的代码编辑器进行 Python/Lua/Rust 开发
- 支持多种字体(pico-8、bbc、cbmII、appleII)
- 动态更改屏幕定义和宽高比
- 截图(PNG)/视频录制(GIF)
- Pico-8 兼容性 + 卡带(P8/P8.PNG)格式支持
它适用于所有平台(Linux/OSX/Windows),在浏览器(通过 Emscripten)以及在树莓派 2/3 等小型硬件上。
控制台灵感来源于令人惊叹的 Pico-8,因此有一个 兼容性模式(不是 100%,并且不是项目的目标)可用,与 Pico-8 控制台和卡带(P8/PNG)一起使用。
您可以在这里跟踪开发情况。
演示
GIF 中的每帧时间较慢(10ms),并不对应游戏的实际速度。
编辑模式
更多高级示例
-
高级微平台 - 初学者套件 http://www.lexaloffle.com/bbs/?tid=28793,使用Python编写 https://github.com/Gigoteur/PX8/tree/master/games/amp
-
2D地形生成(《http://www.lexaloffle.com/bbs/?uid=12213》)使用Python编写 https://github.com/Gigoteur/PX8/tree/master/games/terrain
-
体素框架(《http://www.lexaloffle.com/bbs/?tid=28308》)使用Python编写 https://github.com/Gigoteur/PX8/tree/master/examples/voxel
-
BR:这是一个来自duckduckontheloose(《https://github.com/seleb/DuckDuckOnTheLoose》)的例子 https://github.com/Gigoteur/PX8/tree/master/games/BR
-
Flappy bird克隆(《http://p1xl.com/files/flappy.p8》):https://github.com/Gigoteur/PX8/tree/master/games/flappy
更多gifs?
下载
您可以直接通过git获取最新版本
git clone https://github.com/Gigoteur/PX8.git
cd PX8
二进制文件
或者您可以直接在itch.io上获取多个平台上的最新二进制文件。只有Raspberry PI和Linux版本可以免费下载,但您可以免费构建自己的可执行文件(见构建说明)
要求
您将需要多件东西
- SDL2
- SDL2_mixer
- python3
Linux
Debian/Ubuntu的包
- libsdl2-dev
- libsdl2-mixer-dev
- libpython3-dev
Raspberry Pi
请通过以下方式启用GL驱动程序(7 - 高级选项 -> Ac -> GL驱动程序 -> 是):
sudo raspi-config
OSX
使用brew安装外部依赖项
- brew install python3
- brew install sdl2
- brew install sdl2_mixer
目前您需要导出DYLD_FALLBACK_LIBRARY_PATH环境变量以支持python,例如
- export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib
为Linux/Windows/OSX构建
首先要做的是安装Rust,因此请访问rustup 并按照所有说明进行操作。
您可以直接使用cargo构建PX8,例如在发布模式下,支持Python和Lua。
cargo build --features="cpython lua" --release
分辨率
默认分辨率将是128x128,但您可以通过调用mode API函数来更改默认值
mode(width, height, [aspect_ratio])
示例
mode(128, 128, 1.0)
mode(512, 128, 4.0)
SDL + Opengl
您可以通过'-o'选项通过SDL强制使用opengl
./target/release/px8 -o ./games/ski/ski.px8
使用Emscripten
您必须遵循以下指南来安装Emscripten。之后,您可以在此处找到一些帮助。
您可以在存储库中查看PX8 + Emscripten的示例。您还可以从浏览器中查看实时示例
坐标系
每个像素可以从 0 到 128(或新的定义宽度/高度)访问:
键盘快捷键
玩家 1
- 光标,Z,X / C,V / N,M
玩家 2
- ESDF, LSHIFT,A / TAB,Q,E
系统快捷键
- F2: 信息调试(FPS,执行时间(绘制,更新),调色板名称)
- F3: 捕获屏幕截图(png)
- F4: 捕获视频(gif)
- F5: 保存当前卡带数据(如果以编辑模式打开)
- F6: 在编辑/播放模式之间切换(如果以编辑模式打开)
- F7: 切换到下一个可用调色板
运行卡带
您可以通过提供卡带的路径直接运行它
./target/release/px8 ./games/ski/ski.px8
演示
您也可以运行 API 演示
./target/release/px8 -s 4 ./examples/api_demos.py
或一些花哨的演示
./target/release/px8 -s 4 ./examples/demos.py
./target/release/px8 -s 4 ./examples/voxel/voxel.px8
./target/release/px8 -s 4 ./examples/pong/pong.px8
./target/release/px8 -s 4 ./games/ski/ski.px8
./target/release/px8 -s 4 ./games/amp/amp.px8
./target/release/px8 -s 4 ./games/terrain/terrain.px8
./target/release/px8 -s 4 ./games/BR/BR.px8
编辑卡带
您可以通过使用特定的 '-e' 选项编辑卡带中的 GFX,并通过 'F6' 在运行模式和编辑器之间切换
./target/release/px8 -s 4 -e ./games/ski/ski.px8
并且您可以使用 'F5' 保存 GFX。
显示选项
更改比例
使用 '-s' 选项可以更改控制台的大小,因此您可以增加它(2/4/8/10)。
您也可以使用 '-f' 选项使用全屏选项。
SDL + OpenGL
您可以使用 '-o' 选项强制 SDL 使用 OpenGL
PICO8 兼容模式
您可以使用 '-m pico8' 选项加载 PICO8 卡带文件以转换 Lua 代码。
如何创建新的卡带
PX8 将在启动时或在运行时调用 3 个函数
- _init : 启动时调用一次,主要用于初始化变量
- _update: 每个可见帧调用一次,主要用于获取键盘输入等
- _draw: 每个可见帧调用一次,主要用于在屏幕上绘制事物:)
之后,您可以使用 API 来制作游戏。在 Python 或 Lua 语言中,您可以做任何您想做的事情,没有任何限制。
默认情况下,我不会对 Python 或 Lua 解释器进行任何修改,因此您可以自由地创建线程、加载本地文件等。
您可以在 wiki 中找到更多技术文档。
Python
您可以创建一个经典的 Python 程序,您只需要定义之前的功能(_init,_update,_draw),并且您可以导入任何包。
def _init():
px8_print("INIT")
def _update():
px8_print("UPDATE")
def _draw():
px8_print("DRAW")
Lua
function _init()
print("INIT")
end
function _update()
print("UPDATE")
end
function _draw()
print("DRAW")
end
卡带格式
格式 | 读取 | 写入 |
---|---|---|
P8 | ✅ | ✅ |
P8.PNG | ✅ | 🔴 |
PX8 | ✅ | ✅ |
API 文档
API | Rust | Python | Lua |
---|---|---|---|
相机 | ✅ | ✅ | ✅ |
圆 | ✅ | ✅ | ✅ |
圆形填充 | ✅ | ✅ | ✅ |
裁剪 | ✅ | ✅ | ✅ |
清除 | ✅ | ✅ | ✅ |
颜色 | ✅ | ✅ | ✅ |
椭圆 | ✅ | ✅ | ✅ |
椭圆填充 | ✅ | ✅ | ✅ |
获取文件 | ✅ | ✅ | ✅ |
设置文件 | ✅ | ✅ | ✅ |
字体 | ✅ | ✅ | ✅ |
线 | ✅ | ✅ | ✅ |
模式 | ✅ | ✅ | ✅ |
调色板 | ✅ | ✅ | ✅ |
调色板切换 | ✅ | ✅ | ✅ |
获取像素 | ✅ | ✅ | ✅ |
打印 | ✅ | ✅ | ✅ |
设置像素 | ✅ | ✅ | ✅ |
噪声 | ✅ | ✅ | ✅ |
设置噪声输入 | ✅ | ✅ | ✅ |
矩形 | ✅ | ✅ | ✅ |
矩形填充 | ✅ | ✅ | ✅ |
获取像素 | ✅ | ✅ | ✅ |
精灵 | ✅ | ✅ | ✅ |
设置精灵 | ✅ | ✅ | ✅ |
精灵绘制 | ✅ | ✅ | ✅ |
三角形 | ✅ | ✅ | ✅ |
三角形填充 | 🔴 | 🔴 | 🔴 |
按钮 | ✅ | ✅ | ✅ |
按钮状态 | ✅ | ✅ | ✅ |
地图 | ✅ | ✅ | ✅ |
获取地图 | ✅ | ✅ | ✅ |
设置地图 | ✅ | ✅ | ✅ |
有关每个函数及其参数的更多详细信息,请参阅此处:API
依赖项
~38MB
~608K SLoC