2014-01-13 2 views
0

У меня есть 2 вопроса, направленные на словарькак сохранить/Словарь нагрузки от SharedObject

первые: Im возникают проблемы с сохранением данных из данных/погрузочного словаря в словарь и я не могу понять, почему это разве working.What я делаю неправильно здесь ???

import flash.display.MovieClip; 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.utils.Dictionary; 
import flash.net.SharedObject; 

public class Main extends MovieClip 
{ 
    private var _box:Dictionary = new Dictionary ; 
    private var _change:Dictionary = new Dictionary ; 
    private var _loadingItems:Dictionary = new Dictionary ; 

    private var sData:SharedObject = SharedObject.getLocal("octopod_4"); 

    public function Main() 
    { 
     if (sData.data.myStorage == undefined) 
     { 
      trace("1st time this game"); 
      for (var i:int = 0; i < 5; i++) 
      { 
       var myImage_mc:MovieClip = new MovieClip(); 
       _box[i] = myImage_mc; 
       if (i > 1) 
       { 
        _change[myImage_mc] = _box[i - 2]; 
       } 
      } 
      sData.data.myStorage = _change; 
      sData.flush(); 
      trace(sData.data.myStorage); 


      //we trace what we have in the Dictionary 
      for (var key:* in _change) 
      { 
       trace('_conditions[' + key.name + '] = ' + _change[key].name); 
      } 
      for (var key:* in _box) 
      { 
       trace('_box[' + key + '] = ' + _box[key].name); 
      } 

     } 
     else if (sData.data.myStorage != undefined) 
     { 
      trace("loaded before"); 
      _loadingItems = sData.data.myObject; 
      trace("_loadingitems " + _loadingItems) 
     } 
    } 
} 

второй вопрос: как я могу извлечь эти данные из sData.data.myObject; и введите его в _loadingItems Я имею в виду, что из-за ошибки он дает мне Ошибка # 2004: Один из параметров недействителен. i не могу видеть, имеются ли данные из sData.data.myObject; копируется в _loadingItems. Это ??

ответ

1

Вы помещаете MovieClips в свой словарь, и ничто не распространяется на DisplayObject, если вы не используете для этого IExternalizable. Это связано с тем, что любой экранный объект имеет общедоступную ссылку на сцену, которая является динамической, то есть значение, хранящееся в stage, является указателем на ячейку памяти. Затем, когда вы пытаетесь загрузить объект из общего объекта, поведение по умолчанию заключается в том, чтобы установить все свойства на сохраненные значения, которые теперь недействительны, поскольку Flash занимает различный набор адресов памяти при каждом загрузке фильма и вы получаете свой 2004 год. IExternalizable реализация переопределяет поведение по умолчанию с помощью настраиваемого кода, но при написании его реализации вы должны соблюдать определенные жесткие ограничения. Итак, если вы хотите хранить что-то в общему объекте, вы должны разработать способ хранения только нескольких статических метаданных (строки, числа, массивы прекрасны, но вложенных объектов обычно нет, обратите внимание, что объект как член из массива - вложенный объект), а затем создать набор динамических объектов (все объекты отображения) в соответствии с полученными метаданными.

Смежные вопросы