Как импортировать объект JSON с функциями внутри? - PullRequest
2 голосов
/ 30 июня 2011

Добрый день,

Я сейчас играю с JS.Class , и я делаю текстовую игру.На данный момент он выполняется в браузере, но в конечном итоге он будет выполняться в среде Node.js, управляющей сокетами, и поддержка цветов ANSI для игроков, использующих клиент, подобный telnet.

Я создал несколько классов иодин из них определяет персонажей (реальных игроков или игровых персонажей).

Для реального игрока код для создания нового персонажа выглядит следующим образом: 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: я не знаю, какой вопрос использовать в заголовке)

1 Ответ

2 голосов
/ 30 июня 2011

Могут ли эти символы быть разделены на типы символов. Ваши типы символов могут наследоваться от Character, и каждый из них реализует свой собственный метод onArrive. Что-то вроде:

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

и т. Д.

Вы не можете иметь функцию, определенную в вашем JSON, возвращенную с сервера, и вы не хотите этого делать. Это было бы слишком тесно связано. Просто определите прототипы объектов, которые наследуют и создают типы символов, которые имеют соответствующие «особенности» (или поведение)

Дополнительный

Я немного сбит с толку относительно того, что вы ищете, но позвольте мне сделать еще один удар. Если у вас есть данные, которыми обмениваются несколько серверов (символьные данные), вы хотите иметь возможность создавать экземпляры объектов определенного типа. Предполагая, что эти данные знают свой тип (то есть добавляют это как свойство к символу JSON), вы можете создать экземпляр объекта любого типа. Используя описанные выше объявления прототипов, вы можете создать столько типов символов, сколько захотите. Затем вы можете создать экземпляр этого типа с помощью некоторого фабричного метода. Например

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

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

Предполагая, что вы определили Dude, Another, Lah как другие прототипы Character, и каждый из них реализует некоторый метод onAdd (или просто использует значение по умолчанию, определенное в Character. Затем вы можете использовать его следующим образом:

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

character.onAdd();  
...