-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathsimultaneous-actions.html
203 lines (176 loc) · 21.4 KB
/
simultaneous-actions.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<!DOCTYPE html>
<html lang="zh-cn">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>同步动作及优先级 | Screeps 中文文档</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Canonical links -->
<link rel="canonical" href="http://screeps-cn.github.io/simultaneous-actions.html">
<!-- Alternative links -->
<link rel="alternative" hreflang="en" href="http://screeps-cn.github.io/simultaneous-actions.html">
<link rel="alternative" hreflang="zh-tw" href="http://screeps-cn.github.io/zh-tw/simultaneous-actions.html">
<link rel="alternative" hreflang="zh-cn" href="http://screeps-cn.github.io/zh-cn/simultaneous-actions.html">
<link rel="alternative" hreflang="ru" href="http://screeps-cn.github.io/ru/simultaneous-actions.html">
<link rel="alternative" hreflang="ko" href="http://screeps-cn.github.io/ko/simultaneous-actions.html">
<!-- Icon -->
<link rel="apple-touch-icon" sizes="57x57" href="/icon/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="114x114" href="/icon/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="72x72" href="/icon/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="144x144" href="/icon/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="60x60" href="/icon/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="120x120" href="/icon/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="76x76" href="/icon/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="152x152" href="/icon/apple-touch-icon-152x152.png">
<link rel="icon" type="image/png" href="/icon/favicon-196x196.png" sizes="196x196">
<link rel="icon" type="image/png" href="/icon/favicon-160x160.png" sizes="160x160">
<link rel="icon" type="image/png" href="/icon/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="/icon/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="/icon/favicon-32x32.png" sizes="32x32">
<meta name="msapplication-TileColor" content="#2f83cd">
<meta name="msapplication-TileImage" content="/icon/mstile-144x144.png">
<!-- CSS -->
<!-- build:css build/css/navy.css -->
<link rel="stylesheet" href="/css/navy.css?1">
<link rel="stylesheet" href="/css/prism.css">
<!-- endbuild -->
<link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css">
<!-- RSS -->
<link rel="alternate" href="/atom.xml" title="Screeps 中文文档">
<!-- Open Graph -->
<meta name="description" content="译者注:此章所提及所有的“冲突”及“优先级”都是对同一 creep 而言。有关不同 creep 的冲突,参见“结束阶段”。
不同动作的优先级对单一 creep 而言,其身体的构造决定了其所能执行的动作( action ,及蓝色方块标记的左侧栏条目)。虽说您可以创造一个万金油般的 creep ,但它仍不能在同一 tick 中执行所有的动作。下图便是各个动作之间的优先级关联:
如过您尝试在同一 t">
<meta property="og:type" content="website">
<meta property="og:title" content="同步动作及优先级">
<meta property="og:url" content="http://screeps-cn.github.io/simultaneous-actions.html">
<meta property="og:site_name" content="Screeps 中文文档">
<meta property="og:description" content="译者注:此章所提及所有的“冲突”及“优先级”都是对同一 creep 而言。有关不同 creep 的冲突,参见“结束阶段”。
不同动作的优先级对单一 creep 而言,其身体的构造决定了其所能执行的动作( action ,及蓝色方块标记的左侧栏条目)。虽说您可以创造一个万金油般的 creep ,但它仍不能在同一 tick 中执行所有的动作。下图便是各个动作之间的优先级关联:
如过您尝试在同一 t">
<meta property="og:image" content="http://screeps-cn.github.io/img/action-priorities.png">
<meta property="og:updated_time" content="2024-09-20T13:38:58.409Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="同步动作及优先级">
<meta name="twitter:description" content="译者注:此章所提及所有的“冲突”及“优先级”都是对同一 creep 而言。有关不同 creep 的冲突,参见“结束阶段”。
不同动作的优先级对单一 creep 而言,其身体的构造决定了其所能执行的动作( action ,及蓝色方块标记的左侧栏条目)。虽说您可以创造一个万金油般的 creep ,但它仍不能在同一 tick 中执行所有的动作。下图便是各个动作之间的优先级关联:
如过您尝试在同一 t">
<meta name="twitter:image" content="http://screeps-cn.github.io/img/action-priorities.png">
<!-- Google Analytics -->
</head>
<body>
<div id="container">
<header id="header" class="wrapper">
<div id="header-inner" class="inner">
<h1 id="logo-wrap">
<a href="https://screeps.com" id="logo">Screeps</a>
<a href="/index.html" id="logo-docs">docs</a>
</h1>
<a id="mobile-nav-toggle">
<span class="mobile-nav-toggle-bar"></span>
<span class="mobile-nav-toggle-bar"></span>
<span class="mobile-nav-toggle-bar"></span>
</a>
<div id="header-main"></div>
</div>
</header>
<div id="content-wrap">
<div id="content" class="wrapper">
<div id="content-inner">
<article class="article-container" itemscope itemtype="http://schema.org/Article">
<div class="article-inner">
<div class="article">
<div class="inner">
<header class="article-header">
<h1 class="article-title" itemprop="name" id="top">同步动作及优先级</h1>
<a href="https://github.com/screeps-cn/docs/edit/master/source/simultaneous-actions.md" class="article-edit-link" title="改进本文"><i class="fa fa-pencil"></i></a>
</header>
<div class="article-content" itemprop="articleBody">
<blockquote class="note info"><p><strong>译者注:</strong>此章所提及所有的“冲突”及“优先级”都是对同一 <a href="/creeps.html">creep</a> 而言。有关不同 creep 的冲突,参见<a href="/game-loop.html">“结束阶段”</a>。</p>
</blockquote>
<h2 id="不同动作的优先级" class="article-heading"><a href="#不同动作的优先级" class="headerlink" title="不同动作的优先级"></a>不同动作的优先级<a class="article-anchor" href="#不同动作的优先级" aria-hidden="true"></a></h2><p>对单一 creep 而言,其身体的构造决定了其所能执行的<a href="api/#Creep">动作</a>( action ,及蓝色方块标记的左侧栏条目)。虽说您可以创造一个万金油般的 creep ,但它仍不能在同一 <a href="/game-loop.html">tick</a> 中执行所有的动作。下图便是各个动作之间的优先级关联:</p>
<p><img src="img/action-priorities.png" alt=""></p>
<p>如过您尝试在同一 tick 内执行多个有优先级冲突的动作,<strong>只有图中更靠右的的会被执行</strong>。然而各动作的返回值并不会因优先级冲突而改变。如果动作本身是合乎情理的,那么它总会返回 <code>OK</code> 。举个例子:</p>
<pre class="highlight undefined tab-undefined "><code> <span class="token comment" spellcheck="true">// 第一 tick</span>
creep<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span>constructionSite<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// ERR_NOT_ENOUGH_ENERGY - 报错:能量不足</span>
creep<span class="token punctuation">.</span><span class="token function">harvest</span><span class="token punctuation">(</span>source<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// OK – 执行成功, creep 收获了能量</span>
<span class="token comment" spellcheck="true">// 第二 tick</span>
creep<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span>constructionSite<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// OK – 执行成功</span>
creep<span class="token punctuation">.</span><span class="token function">harvest</span><span class="token punctuation">(</span>source<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// OK - 虽然返回值也为 OK ,但由于在同一 tick (上一行)里使用了优先级更高的 [`Creep.build()`](api/#Creep.build)</span>
<span class="token comment" spellcheck="true">//所以 [`Creep.harvest()`](api/#Creep.harvest) 实际上被覆盖了,没有被执行。</span></code></pre><p>虽说如此,但您却能在同一 tick 内执行多个没有优先级冲突的动作。比如说:</p>
<pre class="highlight undefined tab-undefined "><code> creep<span class="token punctuation">.</span><span class="token function">moveTo</span><span class="token punctuation">(</span>target<span class="token punctuation">)</span><span class="token punctuation">;</span>
creep<span class="token punctuation">.</span><span class="token function">rangedMassAttack</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
creep<span class="token punctuation">.</span><span class="token function">heal</span><span class="token punctuation">(</span>target<span class="token punctuation">)</span><span class="token punctuation">;</span>
creep<span class="token punctuation">.</span><span class="token function">transfer</span><span class="token punctuation">(</span>target<span class="token punctuation">,</span> RESOURCE_ENERGY<span class="token punctuation">,</span> amountTransfer<span class="token punctuation">)</span><span class="token punctuation">;</span>
creep<span class="token punctuation">.</span><span class="token function">drop</span><span class="token punctuation">(</span>amountDrop<span class="token punctuation">,</span> RESOURCE_ENERGY<span class="token punctuation">)</span><span class="token punctuation">;</span>
creep<span class="token punctuation">.</span><span class="token function">pickup</span><span class="token punctuation">(</span>energy<span class="token punctuation">)</span><span class="token punctuation">;</span>
creep<span class="token punctuation">.</span><span class="token function">claimController</span><span class="token punctuation">(</span>controller<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>上例的动作无一冲突,都能在同一 tick 中被成功执行。</p>
<p>取决于能量的多少,同时使用多个有关能量传输的动作会导致不同的结果</p>
<ul>
<li>如果能量足够有余,那么所有的所有动作都将会被执行</li>
<li>否则,优先级规则会介入以解决冲突</li>
</ul>
<h2 id="同一动作的优先级" class="article-heading"><a href="#同一动作的优先级" class="headerlink" title="同一动作的优先级"></a>同一动作的优先级<a class="article-anchor" href="#同一动作的优先级" aria-hidden="true"></a></h2><p>值得注意的是,不同动作的执行结果仅和它们之间的优先级有关,与在代码中的的顺序无关。但是对与<strong>相同</strong>的动作,最后一个才会被成功执行。例如在同一 tick 中:</p>
<pre class="highlight undefined tab-undefined "><code> creep<span class="token punctuation">.</span><span class="token function">moveTo</span><span class="token punctuation">(</span>target<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 被覆盖(因为 [`Creep.moveTo()`](api/#Creep.moveTo) 源码中有调用 [`Creep.move()`](api/#Creep.move))</span>
creep<span class="token punctuation">.</span><span class="token function">move</span><span class="token punctuation">(</span>RIGHT<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 被覆盖</span>
creep<span class="token punctuation">.</span><span class="token function">move</span><span class="token punctuation">(</span>LEFT<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// 被执行</span></code></pre><p>最终结果是这个 creep 会向左移动一格。</p>
<h2 id="更多" class="article-heading"><a href="#更多" class="headerlink" title="更多"></a>更多<a class="article-anchor" href="#更多" aria-hidden="true"></a></h2><ol>
<li>请注意,治疗一个满血的 creep 或修复满血的建筑会返回 <code>OK</code> 并可能覆盖其他优先级较低的动作。</li>
<li>尽管同时使用 <code>transfer</code> (传出)和 <code>drop</code> (丢弃)并不一定会产生优先级冲突,您却不能同时执行多个 <code>transfer</code>(比如传资源给多个建筑),以此类推。</li>
<li>同时执行需要 <code>CARRY</code> 部件的不同动作不会产生冲突。但资源的存量并没不会在玩家代码执行过程中被改变。参见<a href="/game-loop.html">理解游戏循环、游戏时间、ticks</a></li>
</ol>
</div>
<footer class="article-footer">
<time class="article-footer-updated" datetime="2024-09-20T13:38:58.409Z" itemprop="dateModified">上次更新:9月 20, 2024</time>
<a href="/commit.html" class="article-footer-prev"><i class="fa fa-chevron-left"></i><span>外部提交</span></a><a href="/cpu-limit.html" class="article-footer-next"><span>CPU 限制</span><i class="fa fa-chevron-right"></i></a>
</footer>
</div>
</div>
<aside id="article-toc" role="navigation">
<div id="article-toc-inner">
<strong class="sidebar-title">目录</strong>
<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#不同动作的优先级"><span class="toc-text">不同动作的优先级</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#同一动作的优先级"><span class="toc-text">同一动作的优先级</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#更多"><span class="toc-text">更多</span></a></li></ol>
<a href="#" id="article-toc-top">回到顶部</a>
</div>
</aside>
</div>
</article>
<aside id="sidebar" role="navigation">
<div class="inner"><a href="/api/" class=api-link><span>API Reference</span><img src="/img/link-external.svg"></a><a href="/index.html" class="sidebar-link">总览</a><strong class="sidebar-title">游戏环境</strong><a href="/introduction.html" class="sidebar-link">简介</a><a href="/creeps.html" class="sidebar-link">Creeps</a><a href="/control.html" class="sidebar-link">控制</a><a href="/defense.html" class="sidebar-link">防御</a><a href="/respawn.html" class="sidebar-link">重生</a><a href="/start-areas.html" class="sidebar-link">初始区域</a><a href="/resources.html" class="sidebar-link">资源</a><a href="/market.html" class="sidebar-link">市场</a><a href="/invaders.html" class="sidebar-link">NPC 入侵者</a><a href="/power.html" class="sidebar-link">超能</a><strong class="sidebar-title">脚本</strong><a href="/scripting-basics.html" class="sidebar-link">脚本基础</a><a href="/global-objects.html" class="sidebar-link">全局对象</a><a href="/modules.html" class="sidebar-link">模块</a><a href="/debugging.html" class="sidebar-link">调试</a><a href="/game-loop.html" class="sidebar-link">游戏循环</a><a href="/commit.html" class="sidebar-link">外部提交</a><a href="/simultaneous-actions.html" class="sidebar-link current">同步操作</a><a href="/cpu-limit.html" class="sidebar-link">CPU 限制</a><strong class="sidebar-title">其他</strong><a href="/architecture.html" class="sidebar-link">服务器架构</a><a href="/ptr.html" class="sidebar-link">公开测试区域 (PTR)</a><a href="/third-party.html" class="sidebar-link">第三方工具</a><a href="/auth-tokens.html" class="sidebar-link">验证令牌</a><a href="/community-servers.html" class="sidebar-link">社区服务器</a><a href="/tos.html" class="sidebar-link">服务条款</a><a href="/privacy-policy.html" class="sidebar-link">隐私政策</a><strong class="sidebar-title">资源</strong><a href="http://blog.screeps.com" class="sidebar-link">博客</a><a href="http://blog.screeps.com/categories/Changelogs/" class="sidebar-link">修改日志</a><a href="http://chat.screeps.com" class="sidebar-link">聊天室</a><a href="https://screeps.com/forum/" class="sidebar-link">论坛</a><strong class="sidebar-title">贡献文章</strong><a href="/contributed/rules.html" class="sidebar-link">贡献规则</a><a href="/contributed/advanced_grunt.html" class="sidebar-link">高级 Grunt 使用</a><a href="/contributed/modifying-prototypes.html" class="sidebar-link">修改原型</a><a href="/contributed/caching-overview.html" class="sidebar-link">缓存概述</a><a href="/contributed/ps_ubuntu.html" class="sidebar-link">私有服务器 MongoDB</a></div>
</aside>
</div>
</div>
</div>
<footer id="footer" class="wrapper">
<div class="inner">
<div id="footer-copyright">
© 2024 <a href="https://screeps.com/" target="_blank">Screeps</a><br>
Documentation licensed under <a href="http://creativecommons.org/licenses/by/4.0/" target="_blank">CC BY 4.0</a>.
</div>
<div id="footer-links">
<a href="https://github.com/screeps-cn/docs" class="footer-link" target="_blank"><i class="fa fa-github-alt"></i></a>
</div>
</div>
</footer>
</div>
<div id="mobile-nav-dimmer"></div>
<nav id="mobile-nav">
<div id="mobile-nav-inner">
<a href="/api/" class=api-link><span>API Reference</span><img src="/img/link-external.svg"></a><a href="/index.html" class="mobile-nav-link">总览</a><strong class="mobile-nav-title">游戏环境</strong><a href="/introduction.html" class="mobile-nav-link">简介</a><a href="/creeps.html" class="mobile-nav-link">Creeps</a><a href="/control.html" class="mobile-nav-link">控制</a><a href="/defense.html" class="mobile-nav-link">防御</a><a href="/respawn.html" class="mobile-nav-link">重生</a><a href="/start-areas.html" class="mobile-nav-link">初始区域</a><a href="/resources.html" class="mobile-nav-link">资源</a><a href="/market.html" class="mobile-nav-link">市场</a><a href="/invaders.html" class="mobile-nav-link">NPC 入侵者</a><a href="/power.html" class="mobile-nav-link">超能</a><strong class="mobile-nav-title">脚本</strong><a href="/scripting-basics.html" class="mobile-nav-link">脚本基础</a><a href="/global-objects.html" class="mobile-nav-link">全局对象</a><a href="/modules.html" class="mobile-nav-link">模块</a><a href="/debugging.html" class="mobile-nav-link">调试</a><a href="/game-loop.html" class="mobile-nav-link">游戏循环</a><a href="/commit.html" class="mobile-nav-link">外部提交</a><a href="/simultaneous-actions.html" class="mobile-nav-link current">同步操作</a><a href="/cpu-limit.html" class="mobile-nav-link">CPU 限制</a><strong class="mobile-nav-title">其他</strong><a href="/architecture.html" class="mobile-nav-link">服务器架构</a><a href="/ptr.html" class="mobile-nav-link">公开测试区域 (PTR)</a><a href="/third-party.html" class="mobile-nav-link">第三方工具</a><a href="/auth-tokens.html" class="mobile-nav-link">验证令牌</a><a href="/community-servers.html" class="mobile-nav-link">社区服务器</a><a href="/tos.html" class="mobile-nav-link">服务条款</a><a href="/privacy-policy.html" class="mobile-nav-link">隐私政策</a><strong class="mobile-nav-title">资源</strong><a href="http://blog.screeps.com" class="mobile-nav-link">博客</a><a href="http://blog.screeps.com/categories/Changelogs/" class="mobile-nav-link">修改日志</a><a href="http://chat.screeps.com" class="mobile-nav-link">聊天室</a><a href="https://screeps.com/forum/" class="mobile-nav-link">论坛</a><strong class="mobile-nav-title">贡献文章</strong><a href="/contributed/rules.html" class="mobile-nav-link">贡献规则</a><a href="/contributed/advanced_grunt.html" class="mobile-nav-link">高级 Grunt 使用</a><a href="/contributed/modifying-prototypes.html" class="mobile-nav-link">修改原型</a><a href="/contributed/caching-overview.html" class="mobile-nav-link">缓存概述</a><a href="/contributed/ps_ubuntu.html" class="mobile-nav-link">私有服务器 MongoDB</a>
</div>
</nav>
<!-- Scripts -->
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<!-- build:js build/js/main.js -->
<script src="/js/lang_select.js"></script>
<script src="/js/scrollingelement.js"></script>
<script src="/js/toc.js"></script>
<script src="/js/mobile_nav.js"></script>
<script src="/js/custom.js"></script>
<!-- endbuild -->
<script src="https://cdn.jsdelivr.net/retinajs/1.3.0/retina.min.js" async></script>
<!-- Algolia -->
</body>
</html>