匿名
未登录
中文
讨论
贡献
创建账号
登录
Minecraft基岩版开发Wiki
搜索
致编者:请牢记我们的域名
wiki.mcbe-dev.net
!
致编者:欢迎加入本Wiki的官方交流
QQ群
或
Discord服务器
!
基岩版1.19.31
现已发布!(
了解更多
)
Inner Core
现已支持Xbox模组联机!(
了解更多
)
如果您是第一次来到本Wiki,欢迎
注册一个账户
点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
编辑“
Molang
”(章节)
来自Minecraft基岩版开发Wiki
命名空间
页面
讨论
更多
更多
语言
变体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
页面操作
阅读
编辑
历史
刷新
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==运算表达== ===公共变量=== 通常,一个生物的变量被认为是该生物的私有变量,而另一个生物无法访问。要向其他生物开放此变量的只读访问权限,需要在所拥有实体的资源定义中对该变量设置<code>"public"</code>。另外,建议默认初始化变量。 <syntaxhighlight lang="json" line> { "format_version": "1.10.0", "minecraft:client_entity": { "description": { ... "scripts": { "variables": { "variable.oink": "public" }, "initialize": [ "variable.oink = 0;" ], ... }, ... } } } </syntaxhighlight> <br> ===<span style="letter-spacing:5px;">{}</span>花括号作用域定界符=== 通过用<code>{</code>和<code>}</code>符号限定,可以将一系列语句划分为一个组。这主要用于[[Molang#loop|循环]]和条件语句中: <syntaxhighlight lang="cpp" start="0"> (v.moo > 0) ? { v.x = math.sin(q.life_time * 45); v.x = v.x * v.x + 17.3; t.sin_x = math.sin(v.x); v.x = t.sin_x * t.sin_x + v.x * v.x; v.x = math.sqrt(v.x) * v.x * math.pi; } </syntaxhighlight> <br> ===loop=== “loop”函数用于多次执行表达式,其包含两个参数:<code>loop(''count'',''expression'');</code>,第一个参数用于设置循环次数,第二个参数为需要循环执行的表达式。为了安全起见,Mojang对该函数设置了循环次数限制,其循环计数器最大次数为1024。另外,尽量不要将过多循环函数套用。 使用该函数可以编写出一些特别的功能,例如[[wzh:斐波那契数|斐波那契数]]计算器: <syntaxhighlight lang="cpp" start="0"> v.x = 1; v.y = 1; loop(10, { t.x = v.x + v.y; v.x = v.y; v.y = t.x; }); </syntaxhighlight> <br> ===for_each=== 为了遍历一个数组,需要使用“for_each”函数(例如<code>query.get_nearby_entities</code>将返回一个包含实体的数组)。它需要三个参数:<code>for_each(''variable'', ''array'', ''expression'');</code>,其中的第一个参数可以是任何的变量,包括<samp>temp.</samp>和<samp>variable.</samp>,使用<samp>temp.</samp>可以防止污染实体的变量空间;第二个参数是一个数组;第三个参数是为数组中的每个元素执行的任何Molang表达式。 ===->指针运算符=== 查询函数的一些返回值,或者存储在临时/实体/上下文变量中的值可以是对另一个实体的调用。“->”运算符允许脚本访问变量或对该实体进行查询。例如,下面的示例将查询当前实体四米范围内的所有羊(如果该实体是羊,则包括其自身),如果每只羊正上方的方块带有<samp>stone</samp>标签,则增加变量<code>v.x</code>: <syntaxhighlight lang="cpp" start="0"> "v.x = 0; for_each(v.pig, query.get_nearby_entities(4, 'minecraft:sheep'), { v.x = v.x + v.pig->query.relative_block_has_all_tags(0, 1, 0, 'stone'); });" </syntaxhighlight> 如果“->”运算符的左侧有错误(值为<code>null</code>,该实体之前已被清除,或者存在其他问题),则表达式不会计算右边的值,并返回0。 ===break=== 该运算符用于提前退出“[[Molang#loop|loop]]”或“[[Molang#for_each|for_each]]”。例如: <syntaxhighlight lang="cpp" start="0"> v.x = 1; v.y = 1; loop(10, {t.x = v.x + v.y; v.x = v.y; v.y = t.x; (v.y > 20) ? break;}); </syntaxhighlight> 根据C风格的语言规则,这将立即退出最内部的活动循环。 如果使用下方示例: <syntaxhighlight lang="cpp" start="0"> v.x = 0; loop(10, {loop(10, {v.x = v.x + 1; (v.x > 5) ? break;});}); </syntaxhighlight> 当<code>v.x</code>大于5时,“break”语句将终止内部循环,并继续处理外部循环的脚本。由于<code>v.x</code>未在外部循环之间重置,因此第二次进入内部循环时,这将使<code>v.x</code>再添加1,然后再次退出内部循环,从而导致<code>v.x</code>的最终值为6+1+1+1+…+1=15。 ===continue=== “continue”函数按照C风格的语言规则执行函数,当前仅在循环中受支持。使用该函数可跳到当前循环的下一个迭代。关于内部/外部循环的更多详细信息,请参见上方的“[[Molang#break|break]]”。 下方示例将导致<code>v.x</code>变为6.0,因为一旦达到该值,剩余增量将被跳过。<ref group="注">在这种人为设计的情况下最好打破循环,因为它比继续执行所有的10次迭代更高效。</ref> <syntaxhighlight lang="cpp" start="0"> v.x = 0; loop(10, { (v.x > 5) ? continue; v.x = v.x + 1; }); </syntaxhighlight> <br> === ?<span style="letter-spacing:5px;">?</span>空值合并运算符=== 与[[wzh:C♯|C#]]中的空值合并运算符的工作方式类似,使用空值合并运算符可以引用可能存在或可能不存在的变量,而不会看到内容错误。以前,如果变量不存在,则会出现内容错误。这是为了确保变量始终正确初始化,以避免未初始化的变量错误,但这需要初始化脚本,或者在某些情况下需要一些复杂的解决方案来确保变量被初始化。现在,如果提前知道某个变量不会在脚本的第一次运行中初始化,则可以使用该运算符: <syntaxhighlight lang="cpp" start="0"> variable.x = (variable.x ?? 1.2) + 0.3; </syntaxhighlight> 上述示例中,如果有效,则使用<code>variable.x</code>的值;如果<code>variable.x</code>无效,则会使用<code>1.2</code>。 下方列出了变量无效的情况: *尚未初始化 *对已删除实体的引用 *无效的引用 *包含错误内容 “??”运算符仅对<code>variable.</code>、<code>temp.</code>和<code>context.</code>有效,它们包含对数字或实体的引用,但不包含诸如[[材质]]、[[纹理]]或[[几何]]等资源(因为这些必须存在且有效,否则这属于内容错误)。如果第一个参数出现错误,它将返回第二个参数。<ref group="注">Molang的法则是:如果某个内容出错或值不正确,则会将其转换为0.0(并且通常会在屏幕上抛出[[内容日志]]报错)。内容错误可能会阻止将内容上传到市场。</ref>
摘要:
请注意您对Minecraft基岩版开发Wiki的所有贡献都被认为是在知识共享署名-非商业性使用-相同方式共享下发布,请查看在
Minecraft基岩版开发Wiki:版权
的细节。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。
请勿私自提交受版权保护的材料!
您也可以将取自Mojang(及其网站、说明、指南、艺术概念、渲染图、出版物、第三方网站组件,以及其他此类Mojang已对外公开的受保护材料)的内容上传至Minecraft基岩版开发Wiki。所有权力、署名与利益在合适时仍归属Mojang,也不依照许可被授权。
取消
编辑帮助
(在新窗口中打开)
该页面属于1个隐藏分类:
Category:使用DynamicPageList3的dplreplace解析器函数的页面
我们提供服务需要使用Cookie。您使用我们的服务,即表示您同意我们使用Cookie。
更多信息
确定
导航
导航
首页
最近更改
随机页面
社区门户
新闻动态
计划
沙盒
关于
导航
开发
附加包
模组SDK
ModPE Installer
BlockLauncher
Inner Core
ModdedPE
基岩版专用服务器
ElementZero
Cloudburst Nukkit
合作伙伴
Mineprogramming Wiki
bedrock.dev
友情链接
中文 Minecraft Wiki
我的世界中文论坛
MCDevs Wiki
Inner Core 中文社区
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志
其他项目
变体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體