你好,
我现在正在玩 JS.Class,我正在制作一个基于文本的游戏。目前,它是在浏览器中执行的,但最终, 它将在管理套接字的 Node.js 环境中执行,并为使用类似 telnet 的客户端的玩家提供 ANSI 颜色支持。
我创建了几个类,其中一个定义了 Angular 色(可以是真实玩家或游戏中的 Angular 色)。
对于真正的玩家,创建新玩家的代码如下所示: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 );
通常情况下,游戏中的 Angular 色应该有不同的和独特的方法,我用这些方法来模拟类似事件的行为。
例子:
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 );
问题:
我想找到一种有效的方法来按需加载所有“独特”的游戏 Angular 色(这通常发生在加载新区域时)。 这将支持功能。我真的考虑过使用 AJAX,但那将是无效的 JSON 格式。
关于如何实现这一点的任何提示,或者我应该在我的“游戏”设计中更改什么来实现这一点?
我当然需要一个既能在我的浏览器 中运行又能很好地移植到 Node.js 的解决方案。
谢谢!
(PS:对于我的非常具体的问题,可能对其他人没有帮助,我深表歉意) (PS 2:不知道Title中用什么问题)
最佳答案
这些字符是否可以拆分为字符类型。您可以让您的字符类型继承自 Character
,并且每个字符类型都实现自己的 onArrive
方法。像这样的东西:
function Dude(){};
Dude.prototype = new Character // inherit from character
Dude.prototoype.onArrive = function(){
// do some stuff
}
等等。
您不能在从服务器返回的 JSON 中定义函数,您也不想这样做。那将是紧密耦合的。只需定义继承和创建具有适当“特征”(或行为)的字符类型的对象原型(prototype)
额外的
我对您要找的东西有点困惑,但让我再试一次。如果你有一些数据在几个服务器之间交换,(字符数据)你希望能够实例化某种类型的对象。假设此数据知道其类型(即将其作为属性添加到字符 JSON),那么您可以实例化任何类型的对象。使用上述原型(prototype)声明,您可以创建任意多种类型的 Character。然后您可以通过一些工厂方法实例化此类型。例如
var Factory = {
new: function(attrs){
return new classes[attrs.type](attrs);
}
};
var classes = {
dude: Dude,
another: Another,
blah: Lah,
};
假设您已经将 Dude、Another、Lah 定义为 Character
的其他原型(prototype),并且它们各自实现了一些 onAdd
方法(或者只使用 中定义的默认值>Character
. 然后你就可以像这样使用它了:
character = Factory.new({
type: 'dude',
"Name" : "Cybrix",
"Zone" : "000001-000003",
"Stealth" : false,
"Fighting" : false,
"Blind" : false,
"Sleeping" : false
});
character.onAdd();
关于javascript - 如何导入里面有函数的JSON对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538948/