Bỏ qua

Đó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
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.