问题标签 [screeps]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 对所有可能的子属性的访问器进行原型设计
这是我开始goal
在Creep
类中创建原型的代码:
现在假设我不想Creep.goal
包含单个值,而是包含多个值,并让每个子属性Creep.goal
都具有上述访问器。(所以我可以轻松地将多个游戏对象存储到cree的内存中)
这些属性是在运行时添加的,所以我不知道会有多少,也不知道它们的名字,因此我不能简单地为我想要的每个属性复制粘贴一次这段代码。
为了定义对象的所有可能属性的访问器,我应该如何进行?
- - - 解决方案 - - -
所以有人建议我为此使用 a Proxy
。这对我来说是一个全新的概念,我遇到了很多困难,但我得到了一些我想要的工作!
javascript - Game Screeps - 查找过滤器和静态类型语言 (Scala) - 如何正确外观?
我正在尝试将 JavaScript 教程代码移植到 Scala.js 并卡在过滤结构上 - 任何建议都将不胜感激。
原始代码:
Scala.js 中的代码:
问题是不是所有的结构类型都有.energy
所以这不会编译,尽管过滤的那些有?
我试图定义一个特征 HasEnergy(类似于 JavaScript 接口)并像 FindFilter[Structure with HasEnergy] 一样使用它,它可以编译,但现在我在运行时遇到类型错误 -> TypeError: a.k is not a function
。
我的外墙看起来像这样:
javascript - 如何让 Screeps 找到来源?
在 Screeps 中,我这段代码不起作用:
它是这样说的:
我一直在环顾四周,找不到任何其他方式来寻找资源。
此外,我注意到大多数其他人的代码都不起作用,甚至教程的代码在放入真实游戏时也不再起作用。
javascript - moveTo 是否考虑公共城墙可步行?
是否Creep.moveTo
或Room.findPath
认为公共城墙适合步行?
screeps - 寻找最接近给定蠕变的蠕变
鉴于必须有一组特定的角色并且必须没有指定的合作伙伴,因此很难找到最接近小兵的小兵。
这是为了建立专门的矿工和专门的能源载体(它们必须找到最近的矿工或收割机并携带它们的能量)。
我试过(其中cree变量是运行脚本的cree):
但 findNearest() 似乎已被贬低。用 findClosestByPath() 和 findClosestByRange() 的变体替换它也不起作用。我能做的最好的就是通过这个获得一个cree的位置:
但由于需要转移能量,这是未经过滤且不够具体的。提前感谢您的帮助!
screeps - 如何在相邻房间领取控制器?
使用带有一个或多个 CLAIM 身体部位的cree 来认领控制器时遇到问题。
我正在使用此功能获得房间中最近的控制器:
效果很好,我可以访问该对象并查看它的坐标是否正确。
然而,当我在每一个滴答声中运行它时(当小兵直接在它旁边时),控制器所有者仍然是“无”并且我没有看到任何事情发生,小兵不采取任何行动。
很确定上面对 claimController 的调用是不正确的,但不确定我缺少什么。
javascript - lookForAt 返回未定义
嗨,爬虫玩家,
当我尝试将 lookForAt 分配给变量时,它返回未定义。
即使在控制台中,如果我写
这将返回一个具有位于这些坐标中的不同结构的对象。相反,如果我使用将其分配给变量
它返回未定义。有什么建议么?
javascript - 修改子类实例中的变量
我最近对 Screeps 上瘾了,我重构了一些代码来实现基于任务的实现。任务是诸如“步行到然后收获,直到你满负荷”之类的东西,并且基于编写为 ES6 样式类的单个基本任务模板。Creeps 可以通过加载相关任务文件并返回新任务实例的包装器 (tasks.js) 分配任务。
今天我遇到了一个奇怪的错误,让我觉得我没有完全理解 Javascript 的继承模型。下面是相关代码:
Task.js:(基础任务类)
task_harvest.js:(收获任务)
tasks.js:(通过函数调用生成新任务实例的包装器)
收割机.js:(收割机蠕变的行为模型)
当我分配一个从源中获取的cree 时,我从task_harvest.js 创建一个新任务,将其quiet
属性设置为true
,并将它和它的目标绑定到cree。一旦cree有一个任务,它就会被指示运行它,直到它变得无效(代码未包含在上面)。蠕变可以很好地执行任务,但它仍会将所有内容记录到控制台。
我认为在harvester.js 中,当我设置时taskHarvest.quiet = true;
,从Task.js 导入的行为会this.quiet
显示为true
. 然而,似乎情况并非如此。在roleHarvester
,运行console.log(creep.task.quiet)
返回true
,但在蠕变执行分配的任务时Task
,运行给出。console.log(this.quiet)
false
我可以将quiet
作为可选参数添加到构造函数中,但这很复杂,我想知道为什么我正在做的事情不起作用。
screeps - 上传到 Screeps 的代码的许可证是什么?
Screeps 要求用户输入代码才能玩。然后将此代码的副本发送到 Screeps 服务器,以便他们可以提供游戏服务。
用户在什么条件下提供代码?仅仅是为了运行游戏吗?还是隐含的完全许可可以做任何事情?用户仍然是他提交的代码的唯一所有者吗?
Screeps 服务条款相当简洁,并没有具体说明此事。我们得到的最接近的是:
您承认并同意您对游戏中包含的任何功能或内容不感兴趣,无论是金钱上的还是其他方面的。
由于用户生成的内容仍然是内容,因此可以说通过玩 Screeps,您实际上丧失了您上传的所有内容的所有权。这种解释正确吗?
我知道他们需要一些权利来运行游戏。我也明白这个游戏鼓励开源你的代码。但大多数类似的服务都清楚地阐明了规则。Github TOS 关于用户生成内容的部分实际上比整个 Screeps 许可证还要长。我认为在这里要求澄清是公平的。
javascript - Screeps - 按 1 范围内的来源过滤容器(容器挖掘)
实际上我想找到旁边没有资源的容器,这样我的卡车就可以更灵活地在基地周围传输能量,而不是拥有一个巨大的存储空间。(我的控制器很远)
这没有错误地完成,但我无法获得旁边没有源的容器 ID。
我相信我必须在过滤器中包含逻辑,最有可能遍历每个容器?
我还不够了解循环/迭代以使其正常工作。我尝试了很多东西,但现在我试图弄清楚这个谜题感到无助。