- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我已经研究 Screeps 一段时间了,昨晚我决定通过从 Creep 主类派生两个类 Miner 和 Transporter,将我的一些行为纳入类层次结构。但是,每当我做
console.log(_.functions(minerInstance));
我得到的函数列表和我做的时候完全一样
console.log(_.functions(transporterInstance));
有人可以告诉我我是否做错了什么,或者我是否真的遇到了我的代码运行环境的限制?这是我的代码:
////////////////////////////
// Creep.js
var Creep = function(creep, room) {
this.creep = creep;
this.room = room;
this.name = creep.name;
this.id = creep.id;
};
module.exports = Creep;
Creep.prototype = {
tick: function() {
console.log("Base class implementation of tick(), should never happen.");
},
getRole: function() {
return this.creep.memory.role;
}
};
////////////////////////////
// Miner.js
var Creep = require("Creep");
var Miner = function(creep, room) {
this.base = Creep;
this.base(creep, room);
//Creep.call(this, creep, room);
};
module.exports = Miner;
Miner.prototype = Creep.prototype;
Miner.prototype.tick = function() {
var creep = this.creep;
if (creep.memory.activity === undefined || creep.memory.activity === "") {
var target = creep.pos.findNearest(Game.SOURCES_ACTIVE);
this.mine(creep, target);
}
var act = creep.memory.activity;
if (act == "mine") {
var target = this.getTarget(creep);
if (target !== undefined) {
if (creep.energy < creep.energyCapacity) {
creep.moveTo(target);
creep.harvest(target);
} else {
console.log("Write dump to truck code");
/*var trucks = find.transporterInRange(creep, 1);
if (trucks.length) {
creep.moveTo(trucks[0]);
var amount = trucks[0].energyCapacity - trucks[0].energy;
creep.transferEnergy(trucks[0], amount);
}*/
}
}
}
};
Miner.prototype.mine = function(creep, target) {
creep.memory.target = target.id;
creep.memory.activity = "mine";
};
Miner.prototype.getTarget = function(creep) {
return Game.getObjectById(creep.memory.target);
};
////////////////////////////
// Transporter.js
var Creep = require("Creep");
var Transporter = function(creep, room) {
Creep.call(this, creep, room);
};
module.exports = Transporter;
Transporter.prototype = Creep.prototype;
Transporter.prototype.tick = function() {
var creep = this.creep;
if (creep.energy < creep.energyCapacity) {
var miner = this.room.findByRole(creep, "miner");
console.log(miner);
if (miner !== null) {
//console.log(miner[0].name);
//creep.moveTo(miner);
} else
console.log("no miners found");
} else {
console.log("moving to drop");
//var drop = find.nearestEnergyDropOff(creep);
//creep.moveTo(drop);
//creep.transferEnergy(drop);
}
};
最佳答案
用这条线...
Miner.prototype = Creep.prototype;
...你告诉 JS 这两个原型(prototype)实际上是同一个对象。因此,Miner.prototype
的任何更新也会影响 Creep.prototype
。
一种可能的方法是在建立原型(prototype)之间的链接时使用Object.create
。这是一个简化的例子:
function Foo(a) {
this.a = a;
}
Foo.prototype.tick = function() { console.log('Foo ticks'); };
Foo.prototype.tock = function() { console.log('Foo tocks'); };
function Bar(a, b) {
this.base = Foo;
this.base(a);
this.b = b;
}
Bar.prototype = Object.create(Foo.prototype);
// as you inherit all the properties, you'll have to reassign a constructor
Bar.prototype.constructor = Bar;
Bar.prototype.tick = function() { console.log('Bar ticks'); };
var f = new Foo(1);
f.tick(); // Foo ticks
f.tock(); // Foo tocks
console.log(f); // Foo { a=1, ... }
var b = new Bar(1, 2);
b.tick(); // Bar ticks
b.tock(); // Foo tocks
console.log(b); // Bar { a=1, b=2, ... }
关于javascript - 如何在 Screeps 对象中实现继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400822/
当我使用 Creep.build() build 新墙时,它会创建具有 1 点生命值的墙。现在我正在尝试创建一个修复这些新 build 的墙壁的爬虫。但是我无法找到一种列出和迭代这些墙对象的好方法。
所以我可以攻击其他小兵而不是结构,我想知道你是怎么做到的,我到处寻找答案,但我发现的一切都是关于如何攻击另一个小兵。 最佳答案 这和攻击小兵一样。 creep.attack(structure); 文
我正在玩 Screeps ( http://screeps.com ),并且我正在尝试使用 lodash 模块来过滤我的收割机和其他 Creeps。下面的代码应该可以工作,但是当我运行它时,我得到 R
假设我在内存中保存了房间的名称 - “1-1”。我如何在无法访问该房间中的任何蠕变/结构的情况下访问该房间对象?像这样的东西: function(roomName){ var room = Gam
有什么方法可以从控制台调用模块或函数吗?例如,创建 worker 小兵的模块,从控制台使用 my_module.add_creep 调用? 最佳答案 对于给定的示例,请使用 require('my_m
我有一个用于创建房间布局的原型(prototype)。我正在尝试计算放置容器的位置: the closest point between the spawn and the controller th
我有脚本部分必须获取源ID并将它们存储到内存中,但仍然不起作用,请帮助我。 for(var name in Game.spawns) { var source1 = G
首先,我是这个游戏的新手,但我以前就知道 js。我遇到的问题是我在模拟器中玩耍的结果。 我试图生成一个 creep,我首先修改了 example in the tutorial : Game.spaw
我的内存有问题。它应该存储我的所有数据(而不是对象),但它会不时重置。这是示例: Memory.creeps_idx = 0; module.exports.loop = function ()
我是 Screeps 的新手(喜欢它),我很难为房间中的所有源创建一个变量。我试图确保只有 3 个 creep 在同一个源上工作,所以我有以下代码片段用于我的收割机和我的主模块 主要 var sour
我对 Screeps 还比较陌生,我一直在努力构建自己的基本 AI 系统。然而,我在最初的测试中遇到了障碍。我有一个脚本来确定要做的工作,然后小兵请求可用的工作。我已经能够将 Job 对象存储到 Cr
游戏中Screeps ,我对某些内置函数的返回类型有一些问题。采取以下代码: var creeps1 = Game.creeps var room = Game.rooms[myRoomName];
我在哪里可以找到 Game 对象的常量列表,例如 Game.HOSTILE_CREEPS、Game.MOVE 和 Game .攻击? 我在 http://screeps.com/docs/ 上找不到它
有没有办法让 screeps 代码将字符串打印到控制台(或任何地方)以进行简单调试? 最佳答案 您可以为此使用标准的 console.log 方法。 关于javascript - Screeps:将调
// Creep has Energy packed creep.say('E: ' + creep.carry.energy); if (creep.carry.en
在 Screeps 中,是否有可能不仅在控制台输出中看到错误,而且还能看到模块、行,也许还有堆栈跟踪? 更新:这是我得到的错误的样子。我没有看到行号或堆栈跟踪,或者可能没有看到启用它们的按钮? htt
在 Screeps 中,这段代码不起作用: var sources = creep.room.find(Game.FIND_SOURCES_ACTIVE); 它是这样说的: Cannot read p
我试图编写一个代码来防止 2 个 creep(收割机)前往同一目的地并将它们绑定(bind)到该目的地,直到它满为止。 在第 55 行我得到一个可以理解的错误 55: creep.memory.tar
我有点想用 SO 来指出一些事情。 首先,在这个游戏中使用“脚本”有点奇怪,因为与“普通”Javascript 脚本不同,执行方式不同。我们都知道在脚本中,第一件事首先被执行。所以如果我有: Game
不知道“Screeps”吗?访问 screeps.com 主脚本中的第11行 错误: main:11 if (creep.transfer(Game.spawns.Spawn1, RESO
我是一名优秀的程序员,十分优秀!