Я использую Cirrus для передачи некоторых значений другим игрокам в моей игре, и некоторые из этих значений являются объектами, а это значит, что когда я получаю эти объекты, они теряют свой тип, и они становятся общие объекты.Deserializing объекты, полученные с использованием Cirrus
Я читал, что Cirrus использует AMF, но я не знаю, как восстановить исходный тип объекта моих данных.
Редактировать .:
//these are the classes involved
registerClassAlias("Action", Action);
registerClassAlias("EntityVO", EntityVO);
registerClassAlias("Point", Point);
//Action takes 3 parameters
Action(type:String = "", entity:EntityVO = null, target:EntityVO = null)
// when EntityVO doesnt require a parameter in the constructor or it has a string/int parameter this works:
var entity = new EntityVO();
var byteArray:ByteArray;
byteArray = new ByteArray();
byteArray.writeObject(action);
byteArray.position = 0;
var object:Object = byteArray.readObject(); //<- works ok
//when I make EntityVO to take a non standard parameter like, a Point, like this:
EntityVO(point:Point = null)
//and I do this:
var entity:EntityVO = new EntityVO(new Point());
var action:Action = new Action("addEntity", entity);
var byteArray:ByteArray;
byteArray = new ByteArray();
byteArray.writeObject(action);
byteArray.position = 0;
var object:Object = byteArray.readObject(); //<- it goes into the EntityVO constructor and says that point is null, (I use point in the constructor to set something)
Если обе swf имеют одну и ту же версию того же класса, я бы хотел, чтобы это было автоматически десериализовано, единственная проблема, о которой я мог думать, - это то, что объект является другой версией для взаимодействующих клиентов. При использовании AMF с BlazeDS используется тег метаданных RemoteAlias или псевдоним регистрации, но я считаю, что это всегда просто имя класса Java или имя класса PHP для сопоставления с классом AS3, я бы представлял, так как это все AS3/AMF, тип будет сохраняется. Вы уверены, что оба клиента имеют одинаковый swf? – shaunhusain
Да, это те же самые swfs. – Artemix
Я понимаю, но класс Action требует, чтобы в конструкторе пользовательский объект EntityVO, почему это работает тогда ?, он не должен. – Artemix