使用sharedObjects as3保存1010个数组对象的加载错误

时间:2015-09-22 19:36:04

标签: actionscript-3 save shared-objects

我无法弄清楚这个人,所以你们可以帮助我。

我以一个充满对象的数组的形式存储一些数据,在这个示例卡片中。

在我的主要课程中,我有以下代码:

deckSprite.savedData = SharedObject.getLocal("cardsdata");
deckSprite.savedData.data.savedArray = deckSprite.deckArr;
deckSprite.savedData.flush();
trace(deckSprite.savedData.data.savedArray);

跟踪将输出类似[对象卡1,对象卡2,对象卡3]

的内容

现在在一个名为" deckSprite"的静态类中我有这个:

savedData = sharedObject.getLocal("cardsdata");
if (savedData.data.savedArray == undefined)
{
trace("no save yet");
}
{
else
{
trace("save loaded");
deckArr = savedData.data.savedArray;
trace(savedData.data.savedArray);

现在我的追踪数据仅为"," (不知怎的,卡片已经消失了。)

现在我收到保存的数据后,我重新启动我的应用程序,每当他试图访问deckArr时,它崩溃就会给我错误"一个术语未定义且没有属性"。

当我保存阵列时它怎么可能保存阵列中的所有卡片,当我重新启动应用程序时,它突然只是" ,,"但卡片已经消失了?

1 个答案:

答案 0 :(得分:0)

在AS3中序列化对象时,您必须使用程序包registerClassAlias()中的flash.net注册其类。所以你必须打电话给

registerClassAlias('com.example.deck', Deck)
在任何保存或加载发生之前,程序中的

请参阅AS3 API Reference

的完整参考资料

注意:正如@BadFeelingAbout在评论中指出的那样,您必须在Deck中注册所有引用的课程,即如果您的套牌如下:

class Deck {
    var firstCard:Card;
    var type:DeckType;
}

能够将Deck保存到SharedObject您必须致电

registerClassAlias('com.example.deck', Deck);
registerClassAlias('com.example.card', Card);
registerClassAlias('com.example.decktype', DeckType);

在完成任何保存/加载之前。

修改

一切都取决于阵列的内容 如果我假设,您的deckSprite声明如下:

var deck1:Deck = new Deck();
var deck2:Deck = new Deck();
var deckArr:Array = new Array(deck1, deck2);
var deckSprite:DeckSprite = new DeckSprite()

deckSprite.setDeckArr(deckArr);

然后在将deckArray添加到SharedObject之前,您必须致电registerClassAlias()。您的保存代码将如下所示:

registerClassAlias('com.example.deck', Deck);
deckSprite.savedData = SharedObject.getLocal("cardsdata");
deckSprite.savedData.data.savedArray = deckSprite.deckArr;
deckSprite.savedData.flush();
trace(deckSprite.savedData.data.savedArray);

(将Deck替换为您用于代表甲板的实际类别)

同样,在进行任何加载之前必须调用第一行。

当然最好不要重复自己,所以你应该只在你的程序中调用registerClassAlias('com.example.deck', Deck);一次,所以例如在你的主类的某些init()方法中,如果你有这样的东西