Blade虚模块和开发环境


我希望此文档可帮助无改装经验者快速配置开发环境,或帮助有经验的开发者提高工作效率。

初始准备

  1. 安装 Visual Studio Code(VSCode) 编辑器
    下载:https://code.visualstudio.com/Download
    • 运行 VSCode,点击侧边栏的扩展(快捷键Ctrl + Shift + X
      你可以搜索并安装你需要的语言包(例如 Chinese/Russian)
      然后安装PythonPylance扩展
  2. 安装 Python(版本>=3.8)
    下载:https://www.python.org/downloads/windows/
    • 安装完毕后打开命令行窗口(按 Win + R 后运行cmd
      然后在命令行中安装Bladex
      pip install Bladex
      pip 是 Python 包管理工具,内置于 Python3.4 及之后版本

做完这些,很快就可以享受 Bladex 的代码自动补全和类型提示了 🎉

🚀 快速开始

  1. 将游戏根目录拖动到 VSCode 窗口,意思是将文件夹添加到工作区,后续称为项目根目录。
  2. 右键项目根目录并新建文件夹,名称为.vscode
  3. 在.vscode 中创建文件settings.json此时文件的路径应该是Blade of Darkness/.vscode/settings.json
  4. settings.json 文件内容如下:
{
  // "python.analysis.ignore": ["*"],

  // 启用类型检查
  "python.analysis.typeCheckingMode": "basic",
  // 忽略部分错误提示
  "python.analysis.diagnosticSeverityOverrides": {
    "reportShadowedImports": "none",
    "reportUnboundVariable": "none",
    "reportOptionalMemberAccess": "none",
    "reportUnusedExpression": "none"
  },
  // 额外模块分析路径
  "python.autoComplete.extraPaths": [
    "${workspaceFolder}/Scripts",
    "${workspaceFolder}/Scripts/Biped",
    "${workspaceFolder}/Scripts/Combos",
    "${workspaceFolder}/Lib",
    "${workspaceFolder}/Lib/AnmSets",
    "${workspaceFolder}/Lib/Widgets",
    "${workspaceFolder}/Lib/PythonLib",
    "${workspaceFolder}/Lib/PythonLib/lib-tk",
    "${workspaceFolder}/Lib/PythonLib/DLLs",
    "~/AppData/Local/Programs/Python/Python39/Lib/site-packages/Bladex/__ext__"
  ],
  "python.analysis.extraPaths": [
    "${workspaceFolder}/Scripts",
    "${workspaceFolder}/Scripts/Biped",
    "${workspaceFolder}/Scripts/Combos",
    "${workspaceFolder}/Lib",
    "${workspaceFolder}/Lib/AnmSets",
    "${workspaceFolder}/Lib/Widgets",
    "${workspaceFolder}/Lib/PythonLib",
    "${workspaceFolder}/Lib/PythonLib/lib-tk",
    "${workspaceFolder}/Lib/PythonLib/DLLs",
    "~/AppData/Local/Programs/Python/Python39/Lib/site-packages/Bladex/__ext__"
  ]
}

  • ~/AppData/Local/Programs/Python/Python39是 Python 3.9.x 的安装路径,如果你安装的是不同版本,则需修正路径。
    只需修改Python39部分,例如 py3.10 版本是 Python310,py3.11 是 Python311

至此,你已经可以享受几乎所有模块的代码自动补全功能了!

任意路径的项目如何配置

如果你的项目不是位于游戏目录下(例如D:/MyProject),当它作为项目文件夹添加到工作区时,
只需复制文件Blade of Darkness/.vscode/settings.jsonD:/MyProject/.vscode/settings.json
然后将${workspaceFolder}修改为游戏根目录的绝对路径。

🧩 示例图像


💖 进一步优化编码体验

忽略错误提示

由于 BoD 使用的 Python 版本是 1.5.2,一些落后的语法会被 IDE 认为是语法错误,例如print关键字。
可以在settings.json中添加一行以忽略所有文件中的错误,如果你使用的是本文档提供的设置内容,只需在文件开头取消对它的注释。

"python.analysis.ignore": ["*"],

但同时也失去了 IDE 为你提醒例如参数不匹配等问题

另一种方式是添加行尾注释# type: ignore

print "1" # type: ignore

这只有一行起作用,或者将注释放在文件开头,它将忽略整个文件。

格式化你的代码

格式化程序可提升代码的可读性,方便以后的阅读与修改。

我使用的 py 格式化程序是Blackautopep8
在 VSCode 扩展商店搜索并安装 Black 扩展,然后在编辑窗口中右键配置格式化程序,
最后按快捷键"Shift + Alt + F"进行格式化。

但是 Black 无法格式化存在语法错误的文档,因此当文档中使用的是print "1"关键字而不是函数print("1")的话将无法被格式化程序处理。

autopep8 可以处理存在语法错误的文档,但 VSCode 的 autopep8 扩展同样无法处理语法错误的文档。
解决方案是使用 autopep8 的命令行版本,以下是配置一个 VSCode 任务来一键执行 autopep8 格式化文档:

  1. 在命令行安装 autopep8

    pip install autopep8
  2. 在项目根目录创建文件.vscode/tasks.json,内容如下:

tasks.jsonview raw
{ "version": "2.0.0", "tasks": [ { "label": "Run autopep8 for Blade", "type": "shell", "command": "autopep8", "args": ["${file}", "-i"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ] }

完成!按 F1 显示命令框,输入tasks,然后点击Tasks: Run Task,选择任务Run autopep8 for Blade以格式化 py 文件

这相当于在命令行执行autopep8 file.py -i


如果你想要部分代码无需格式化,可以使用特殊注解来标记
用 “fmt: off” 和 “fmt: on”

# fmt: off
# 这里的代码不会被自动格式化
# 你可以自由地编写和排列代码,而格式化工具将忽略这部分
var=1
# fmt: on
# 这里的代码将再次被格式化

💡 为什么类型提示不起作用?

图中的 inv 是一个未知变量,IDE 无法提示它的属性及方法。
这是因为变量"ent_name"没有类型注解,同样的"o"也是一个未知变量,IDE 无法给出正确的提示。

要告诉 IDE 变量"ent_name"是字符串类型可以使用以下语法:

def foo(ent_name: str):

但这是 py3.x 及以上版本中的有效语法,在旧版本中会导致语法错误。

解决方案是使用特殊注释,该注释需位于函数主体首行:

def foo(ent_name):
    # type: (str) -> ...
    o = Bladex.GetEntity(ent_name)
    inv = o.GetInventory()

现在 IDE 可以正常提示类型了

旧版本的 py 解释器只会认为这是普通的注释,但 IDE 可以分析它们。

PS: 保持良好的编码习惯有助于减少错误并提高代码质量。

VSCode 快捷键

这几个快捷键可帮助开发者快速参考函数定义或可用的值。

  • 触发建议:Ctrl + Space
    若遇到输入法快捷键冲突,可将输入法的快捷键改成其它的
  • 触发参数提示:Ctrl + Shift + Space
  • 速览定义:Alt + F12
    可快速浏览对象的其它属性
  • 转到定义:F12

🔗 链接