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 开发工具

MIT 许可证

2.5MB
15K SLoC

Rust 13K SLoC // 0.1% comments Python 2.5K SLoC // 0.0% comments Shell 13 SLoC // 0.2% comments

Travis for PX8

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)一起使用。

您可以在这里跟踪开发情况。

Donate

演示

GIF 中的每帧时间较慢(10ms),并不对应游戏的实际速度。

编辑模式

更多高级示例

更多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