Minecraft基岩版开发Wiki:技術週報/21m02w03a

出自Minecraft基岩版开发Wiki
assignment 21m02w03a | event 2021/2/21 | confirmation_number 第二期

edit history refresh

navigate_before 21m02w02a | 21m02w03a | 21m02w04a navigate_next

技術更新[編輯]

官方Beta[編輯]

本週官方發佈了Beta 1.16.210.60 更新,其中技術性更新如下:

  • 加入了遊戲測試框架(En:GameTest Framework)。
    • GameTest 是一個基於將測試程式碼與預製的測試結構配對執行的用於伺服器端測試的自動化工具。您可透過在啟用了 Enable GameTest Framework 實驗性玩法的存檔中使用 /gametest 指令來進行相關測試。
    • 此次更新的測試型別包括以下幾種:
      • 方塊測試(BlockTests
      • 除錯測試(DebugTests
      • 門測試(DoorTests
      • 礦車測試(MinecartTests
      • 生物測試(MobTests
      • 尋路測試(PathFindingTests
    • 注意:GameTest 在原主機版上不可用。
  • Mojang 即將停止對 Android 系統 4.4 及以下版本的遊戲支援,詳情可查詢官方支援裝置清單頁面

技術茶館[編輯]

本期主題:《中國版 ModAPI 引擎的基本結構》

本站的 Mod SDK 頁面已對 Mod API 進行了基本介紹,相信各位對於它在網易特色元件中的重要性也有了一定了解。本期我們來了解一下它的基本結構,以及如何在開發實戰中使用這個功能強大的引擎。

基礎環境準備[編輯]

因為網易並沒有為手機端提供可以實時測試腳本的工具,所以建議使用電腦進行腳本的編寫和測試。

推薦組態:

記憶體:4GB+ RAM

文字編輯器: VSCodePyCharm

系統:windows 7 及以上

可用儲存空間:2GB+

在開始前,請務必確認您至少已經了解 Python (2.7版本)中的以下內容:

  • 資料型別和變數
  • 條件判斷和循環
  • 使用dict
  • 呼叫函式
  • 定義函式
  • 函式的參數
  • 使用模組
  • 類和範例

現在,讓我們開始吧!

檔案路徑設定[編輯]

首先,讓我們在元件的行為包根目錄下建立一個單獨的資料夾放置腳本檔案。資料夾的名字可以隨意,但推薦取比較有特色的名稱以防可能出現的衝突。(註:路徑一定要是非中文!)

網易的腳本系統在識別腳本時,並不會根據資料夾的名稱,而是根據資料夾下的 __init__.py 檔案進行識別。故在每個放有腳本檔案的資料夾下(哪怕是已經包含在腳本資料夾內的子資料夾)都需要放置一個名稱為 __init__.py 的檔案,否則該資料夾下的腳本便無法識別。該檔案內什麼都不需要寫,只起到一個辨別的作用。

下面列出從行為包根目錄開始的最簡結構。

  • behavior_packs_xxx
    • entities
    • xxxScripts
      • __init__.py
      • modMain.py
      • ...
    • ...
    • manifest.json
正式起步[編輯]

現在,我們已經擁有了一個最基礎的環境,可以開始著手構建系統了。

我們需要一個名為 modMain.py 的檔案對系統進行註冊。modMain 是 Python 邏輯的入口檔案,需要包含 mod 的初始化與退出時的處理一些初始化函式。

下面是一個 modMain 實例,對該檔案的結構進行解釋。

Mod 屬於 SDK 的內部類,用於繫結

from mod.common.mod import Mod

# 分别导入服务端与客户端的API进行绑定

import mod.server.extraServerApi as serverApi

import mod.client.extraClientApi as clientApi

# 将引擎的方法绑定到类上用于识别

@Mod.Binding(name = "testMod", version = "0.0.1")

class testMod(object):

    def __init__(self):

        pass

    # 服务端脚本初始化的入口函数
    #当然,如果您不需要服务端,您可以直接pass掉它

    @Mod.InitServer()

    def testServerInit(self):

        serverApi.RegisterSystem("testMod", "testModServer", "Scripts.ServerSystem.ServerSystem")
    #RegisterSystem的三个参数分别是[Mod名称][System名称][System类路径](路径从行为包根目录开始计算,中间以“.”隔开而不是“/”。下面客户端注册同理)

    # 服务端脚本在退出时执行的析构函数

    @Mod.DestroyServer()

    def testServerDestroy(self):

        pass

    # 客户端脚本初始化的入口函数

    @Mod.InitClient()

    def testClientInit(self):

        clientApi.RegisterSystem("testMod", "testModClient", "Scripts.ClientSystem.ClientSystem")

    # 客户端脚本在退出时执行的析构函数

    @Mod.DestroyClient():

    def testClientDestroy(self):

        pass

#备注:建议将Mod名称、版本号等需要在多处地方使用的量保存在一个单独的模块文件里,以便将来维护修改。

到這裏,我們就已經成功地註冊了自己的系統,可以開始著手編輯自己的腳本了!

你知道嗎[編輯]

  • 在這個版本,/gametest指令在遊戲中輸入時有著高亮顯示效果。
  • 本週 Mojang 仍未對腳本引擎做出任何更新。