美好的一天,
我正在玩 JS.Class ,我正在制作基于文本的游戏。目前,它是在浏览器中执行但最终, 它将在Node.js环境中执行,为使用类似telnet的客户端的玩家管理套接字和ANSI颜色支持。
我创建了一些类,其中一个定义了角色(可以是真人或游戏中的角色)。
对于真正的玩家,创建新玩家的代码如下所示: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:我不知道在标题中使用什么问题)
答案 0 :(得分: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,另一个,Lah作为Character
的其他原型,他们每个都实现了一些onAdd
方法(或者只使用Character
中定义的默认值。然后你可以像这样使用它:
character = Factory.new({
type: 'dude',
"Name" : "Cybrix",
"Zone" : "000001-000003",
"Stealth" : false,
"Fighting" : false,
"Blind" : false,
"Sleeping" : false
});
character.onAdd();