用Pyrite64节点图(N64 Node Graph)做游戏逻辑:从Start到Load Scene完整示例
2026/9/18 2:41:55 网站建设 项目流程

用Pyrite64节点图(N64 Node Graph)做游戏逻辑:从Start到Load Scene完整示例

【免费下载链接】pyrite64N64 Game-Engine and Editor using libdragon & tiny3d项目地址: https://gitcode.com/GitHub_Trending/py/pyrite64

在 N64 游戏引擎 Pyrite64 中,Pyrite64 节点图(Node Graph)是一种可视化脚本工具:你不需要写 C++,只需把一个个节点拖到画布上、用线连起来,就能描述游戏对象的行为逻辑。编辑器会在构建时把节点图自动转译成原生 C++ 代码运行,因此性能与手写代码完全一致。本文以"从 Start 开始,等待、判断、最后 Load Scene 切换场景"这条最经典的逻辑链为主线,带你从零完整跑通一个 Pyrite64 节点图。

什么是 Pyrite64 节点图:比写代码更直观的游戏逻辑工具 🧩

节点图是 Pyrite64 中三种脚本方式的第三种(另外两种是对象脚本 Object Script 和全局脚本 Global Script),它定位不是通用编程语言,而是编排事件序列的利器。官方文档里给出的典型例子就是:

  • 打开一个文本框
  • 等待玩家响应并分支
  • 等待 5 秒
  • 加载一个新场景

由于底层采用基于栈的协程(coroutine),节点图里的Wait/Wait Frame等待事件时不会阻塞游戏主循环——这正是用节点图做"计时器 + 分支"式逻辑的核心优势。完整介绍见 docs/docs/manual/script/intro.md。

创建节点图三步走:给对象添加 Node Graph 组件

节点图通过Node Graph 组件挂载到场景对象上,创建流程只需三步:

  1. 选中目标对象,添加Node Graph组件;
  2. 点击Create,为图资产(graph asset)命名——注意这是一个独立资产,同一个图可以复用在任意多个对象上
  3. 点击Edit,在节点图编辑器中打开它开始连线。

组件面板包含三个关键选项:

选项说明
File要运行的节点图资产,可 Edit 打开或 Create 新建
Auto Run开启后对象出生时图自动开始运行
Variables图中声明的每个变量都会在这里出现,可为每个对象单独设置初始值

组件细节参考 docs/docs/manual/editor/components/nodeGraph.md。

认识节点图编辑器:右键建节点、拖线连逻辑 🎛️

打开编辑器后,你会看到一个由节点和连线组成的画布,日常操作非常直接:

操作方法
添加节点在空白处右键打开创建菜单(按分类分组);顶部搜索框会自动聚焦,输入即过滤成扁平列表。也可以从引脚拖出一根线松手在空白处,直接创建一个已连好的节点
连接节点从一个输出引脚拖到兼容的输入引脚
布线整形点击连线任意处可加可拖拽的拐点,绕开其他节点;双击拐点删除
编辑属性节点属性直接显示在节点本体上
批量操作空白处拖框多选;右键节点可复制/删除
整理视图左侧面板 Tools 区的Reset View按钮可框选全部节点
分组Tools > Add Group 创建带标题的框,纯粹是视觉分组,方便管理大图
循环变量面板上方的Repeat复选框勾选后,任何流程路径结束都会等一帧回到Start重新执行——相当于把 Wait Frame 接回开头

读懂节点图的关键:逻辑线 vs 值线 ⚡

节点图里有两种线,分清它们是读懂任何一张图的关键

  • 逻辑线(Logic Wire):灰色、以流动虚线绘制,定义"事情发生的顺序"。执行从Start节点出发,顺着逻辑线逐个节点前进,虚线流动方向就是控制流方向。逻辑输出一次只能指向一个下游,但多个上游可以汇入同一个逻辑输入。
  • 值线(Value Wire):携带计算出的数值(比较的数、要发消息的对象等)。每个值引脚都有数据类型(整数、浮点、向量、对象引用……),引脚颜色反映类型,只能连接兼容的引脚——数值类型之间可自动互相转换,向量或对象引用不能接到期望数字的引脚上。值输出可以同时喂给多个输入,而一个值输入只接受一个来源。

内置节点按分类组织在创建菜单里,覆盖Flow(Start、Wait、Wait Frame、Repeat、If-Else、Switch-Case、On Extremum)、Value(常量、Argument、Delta Time、Compare)、Math / Vector Math / Quat Math / Easing / Wave(各类运算与振荡器)、Object(Send Event、Delete Object、Get/Set Position、Set Rotation 等)、Scene(Load Scene)、Variables(Get Var / Set Var)、Debug(Log 系列)、Note等。所有标量输入在未接线时都会显示一个可直接填写的小输入框,方便输入常量。

内置节点定义本身也是脚本,入口源码可参考 data/nodes/builtin/flow.js 与 data/nodes/builtin/object.js。

完整示例:从 Start 到 Load Scene 的通关流程 🏁

下面搭一条最常见的"剧情流程":游戏开始 → 等待 5 秒 → 判断玩家状态 → 加载下一关。只需 5 个节点:

  1. Start:一切逻辑图的入口节点,执行从这里开始,向右拖出第一根逻辑线;
  2. Wait:从 Flow 分类拖入,在节点上把sec.属性填成5——游戏会暂停这条流程 5 秒,而主循环照常运转;
  3. If-Else:分支节点。在它的值输入上接一个Compare或直接从对象变量取值,为真走True线,为假走False线;
  4. Load Scene(Scene 分类):在 True 分支上接一个Load Scene节点,它自带一个场景选择器,直接挑选项目里的目标场景即可,无需填任何代码;
  5. Note(可选但推荐):在图里加个注释框说明这段流程的用途,团队协作时图会更容易读。

连线完成后整条链就是:

Start → Wait(5s) → If-Else →(True)→ Load Scene(nextLevel)→(False)→ 继续游戏逻辑

点击构建,编辑器会把这张图转译成 C++ 协程代码Wait变成coro_sleep,分支变成if/else,最终像手写代码一样原生执行——这也是节点图"不通用但够快"的原因:它只负责把事件序列组织得清晰易改。

进阶技巧:用变量和 Repeat 让逻辑循环起来 🔄

想让流程循环(比如"巡逻 → 检测 → 再巡逻"),有两种方式:

  • 勾选编辑器上方Repeat复选框:任何流程路径结束后自动回 Start 循环;
  • 在图上手动把末尾的Wait Frame接回 Start。

变量(Variables)则让数据在等待之间"存活":

  • 在编辑器左侧Variables 面板声明变量(名字 + 类型:Int / UInt / Float / Vec3 / Quat / Object);
  • Get Var/Set Var节点读写;Set Var带 Op 选项(Set / Add / Subtract)并输出结果值,一个节点就能完成"自增计数器"
  • 因为图是协程运行,变量值会跨Wait/Wait Frame保持——比如"跳跃次数 +1"这种逻辑天然支持;
  • 每个声明的变量会出现在每个使用该图的对象组件上,可为不同对象设置不同的初始值,Object 类型变量则是对象选择器,同一张图在不同对象上可指向不同目标。

还不够?给 Pyrite64 节点图扩展自定义节点 🔧

节点图编辑器内置的节点并非硬编码——每个节点都是一个小型 JavaScript 文件声明的外观、引脚、属性和 C++ 代码生成逻辑。你只需在项目根目录建nodes/文件夹、放入*.js文件(如nodes/logMessage.js),打开项目即被加载,编辑器还会监听该文件夹、保存即热重载,无需重启。

一个自定义节点大致就是:id(稳定唯一标识)、name(菜单里的名字)、inputs/outputs(引脚)、props(可编辑属性)、build(生成 C++ 的那段函数)。比如输出调试日志的节点,build里一行ctx.line(...)就能把 C++ 语句写进生成代码。完整 API(引脚、值类型、属性、代码生成器ctx的全部方法)详见 docs/docs/manual/script/nodeGraphCustom.md,内置节点的实现风格可参考 data/nodes/_types.js。

总结:一张图串起 Pyrite64 游戏逻辑 ⭐

  • 创建:对象加 Node Graph 组件 → Create 命名 → Edit 打开编辑器;
  • 连线:灰色逻辑线管顺序(从 Start 出发),彩色值线传数据(引脚颜色即类型);
  • 完整示例:Start → Wait(5s) → If-Else → Load Scene,5 个节点完成"等待—判断—切场景";
  • 循环与状态:Repeat 复选框 + 声明变量 + Set Var 自增;
  • 扩展nodes/*.js自定义节点,保存即热重载。

更多用法与自定义节点指南,请阅读 docs/docs/manual/script/nodeGraph.md。

【免费下载链接】pyrite64N64 Game-Engine and Editor using libdragon & tiny3d项目地址: https://gitcode.com/GitHub_Trending/py/pyrite64

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询