Đóng gói và phân phối¶
Wayward Crown cung cấp hai phương pháp đóng gói để biên dịch trò chơi thành tệp thực thi có thể phân phối trực tiếp.
So sánh phương pháp¶
| Mục | PyInstaller | Nuitka |
|---|---|---|
| Tốc độ biên dịch | Nhanh (vài giây đến vài phút) | Chậm (5-15 phút) |
| Tốc độ chạy | Giống Python | Nhanh hơn một chút (+5%-30%) |
| Bảo vệ mã nguồn | .pyc có thể bị dịch ngược |
Biên dịch sang C, cực kỳ khó dịch ngược |
| Kích thước phân phối | Nhỏ hơn | Lớn hơn |
| Yêu cầu trình biên dịch C | Không | Có |
| Khuyến nghị sử dụng | Phát triển và thử nghiệm | Phát hành chính thức |
Điều kiện tiên quyết¶
pip install -r requirements.txt
python setup_ext.py build_ext --inplace # Tạo game/_ccore.*.pyd
Phần mở rộng C phải được biên dịch trước; nếu không trò chơi sẽ chuyển sang đường dẫn Python thuần (hiệu suất thấp hơn).
PyInstaller¶
Cài đặt¶
pip install pyinstaller
Lệnh biên dịch¶
pyinstaller --noconfirm --clean --name WaywardCrown ^
--noconsole ^
--icon "assets/Icons/WaywardCrown.ico" ^
--add-data "assets;assets" ^
--add-data "game/content;game/content" ^
--add-data "game/lang;game/lang" ^
--add-data "plugins;plugins" ^
--add-data "campaigns;campaigns" ^
--add-data "maps;maps" ^
--add-data "steam_sdk;steam_sdk" ^
--add-data "THIRD_PARTY_LICENSES.md;." ^
--add-data "LGPL-3.0.txt;." ^
--add-data "GPL-3.0.txt;." ^
--add-binary "game/_ccore.cp314-win_amd64.pyd;game" ^
--hidden-import PySide6.QtWidgets ^
--hidden-import PySide6.QtCore ^
--hidden-import PySide6.QtGui ^
--hidden-import PySide6.QtOpenGLWidgets ^
--hidden-import PySide6.QtMultimedia ^
--hidden-import OpenGL.GL ^
main.py
Đầu ra¶
dist/WaywardCrown/
├── WaywardCrown.exe
└── _internal/
├── assets/
├── game/
│ ├── _ccore.cp314-win_amd64.pyd
│ ├── content/
│ └── lang/
├── campaigns/
├── maps/
└── plugins/
Nuitka¶
Cài đặt¶
pip install nuitka zstandard ordered-set
Yêu cầu trình biên dịch C (Visual Studio Build Tools hoặc MinGW64).
Lệnh biên dịch¶
python -m nuitka ^
--standalone ^
--plugin-enable=pyside6 ^
--include-data-dir=assets=assets ^
--include-data-dir=game/content=game/content ^
--include-data-dir=game/lang=game/lang ^
--include-data-dir=plugins=plugins ^
--include-data-dir=campaigns=campaigns ^
--include-data-dir=maps=maps ^
--include-data-dir=steam_sdk=steam_sdk ^
--include-data-files=steam_sdk/steam_api.dll=steam_sdk/steam_api.dll ^
--include-data-files=steam_sdk/win64/steam_api64.dll=steam_sdk/win64/steam_api64.dll ^
--include-data-files=game/_ccore.cp314-win_amd64.pyd=game/_ccore.cp314-win_amd64.pyd ^
--include-data-files=THIRD_PARTY_LICENSES.md=THIRD_PARTY_LICENSES.md ^
--include-data-files=LGPL-3.0.txt=LGPL-3.0.txt ^
--include-data-files=GPL-3.0.txt=GPL-3.0.txt ^
--include-qt-plugins=multimedia ^
--include-package=OpenGL ^
--include-module=PySide6.QtOpenGLWidgets ^
--include-module=PySide6.QtMultimedia ^
--windows-console-mode=disable ^
--windows-icon-from-ico=assets/Icons/WaywardCrown.ico ^
--output-filename=WaywardCrown.exe ^
--output-dir=dist ^
--lto=yes ^
--jobs=8 ^
main.py
Các tệp cần thiết¶
| Loại | Đường dẫn | Mô tả |
|---|---|---|
| Phần mở rộng C | game/_ccore.cp3XX-*.pyd |
Tăng tốc lõi cho tìm đường A*, băm không gian, v.v. |
| Nội dung trò chơi | game/content/*.json |
Định nghĩa lớp nhân vật, kẻ thù và công trình |
| Gói ngôn ngữ | game/lang/*.json |
Bản dịch 15 ngôn ngữ |
| Tài nguyên đồ họa | assets/ |
Tất cả hình ảnh, nhạc và hiệu ứng âm thanh |
| Chiến dịch | campaigns/ |
Chiến dịch hướng dẫn tích hợp |
| Bản đồ tùy chỉnh | maps/ |
Bản đồ người dùng |
| Plugin | plugins/ |
Tiện ích mở rộng bên thứ ba |
| Steam SDK | steam_sdk/ |
Steamworks DLL |
| Giấy phép | THIRD_PARTY_LICENSES.md v.v. |
Tài liệu tuân thủ LGPLv3 |
Phiên bản Python
Tên tệp .pyd bao gồm phiên bản Python (ví dụ: cp314). Sau khi chuyển đổi phiên bản Python, bạn phải biên dịch lại phần mở rộng C và cập nhật tên tệp trong lệnh biên dịch.