2

再会,

我现在正在玩JS.Class,并且正在制作基于文本的游戏。目前,它在浏览器中执行,但最终将在 Node.js 环境中执行,管理套接字和 ANSI 颜色支持使用类似 telnet 客户端的播放器。

我创建了一些类,其中一个定义了 Characters(可以是真实玩家,也可以是游戏中的角色)。

对于真正的玩家,创建新玩家的代码如下所示:new Character( "userId", { /* player's options/settings/parameters here*/ }, socket );

例子:

new Character( "000001", {
    "Name" : "Cybrix",
    "Zone" : "000001-000003",
    "Stealth" : false,
    "Fighting" : false,
    "Blind" : false,
    "Sleeping" : false
}, socket );

通常,游戏中的角色应该有不同的和独特的方法,我用来模拟类似事件的行为。

例子:

new Character( "000001", {
    "Name" : "Large Dragon Boss",
    "Zone" : "000001-000003",
    "Stealth" : false,
    "Fighting" : false,
    "Blind" : false,
    "Sleeping" : true,
    "onArrive" : function( target ) {
        /* do something unique to this character. Eg: attack target */
    }
}, undefined );

问题:

我想找到一种按需加载所有“独特”游戏角色的有效方法(通常在加载新区域时发生)。这将支持功能。我真的考虑过使用 AJAX,但那将是无效的 JSON 格式。

关于如何实现这一点的任何提示或我应该在我的“游戏”设计中改变什么来实现这一点?

当然,我需要一个既能在我的浏览器中工作又能很好地移植到Node.js的解决方案。

谢谢!

(PS:抱歉我的非常具体的问题可能对其他人没有帮助)(PS 2:我不知道如何在标题中使用什么问题)

4

1 回答 1

2

这些字符是否可以拆分为字符类型。你可以让你的字符类型继承自Character并实现它们自己的onArrive方法。就像是:

function Dude(){};
Dude.prototype = new Character         // inherit from character
Dude.prototoype.onArrive = function(){
  // do some stuff
}

等等。

您不能在从服务器返回的 JSON 中定义函数,您也不想这样做。那将是过于紧密的耦合。只需定义继承并创建具有适当“特征”(或行为)的字符类型的对象原型

额外的

我对你在寻找什么有点困惑,但让我再试一次。如果您在几个服务器之间交换了一些数据,(字符数据)您希望能够实例化某种类型的对象。假设这个数据知道它的类型(即把它作为一个属性添加到字符 JSON)那么你可以实例化任何类型的对象。使用上面的原型声明,您可以创建任意多种类型的 Character。然后你可以通过一些工厂方法来实例化这个类型。例如

var Factory = {
  new: function(attrs){
    return new classes[attrs.type](attrs);
  }
};

var classes = {
  dude: Dude,
  another: Another,
  blah: Lah,
};

假设您已将 Dude、Another、Lah 定义为 of 的其他原型,Character并且它们各自实现了一些onAdd方法(或仅使用 中定义的默认方法Character。那么您可以像这样使用它:

character = Factory.new({
  type: 'dude',
  "Name" : "Cybrix",
  "Zone" : "000001-000003",
  "Stealth" : false,
  "Fighting" : false,
  "Blind" : false,
  "Sleeping" : false
});

character.onAdd();  
于 2011-06-30T17:57:31.223 回答