我遇到了sharedObject flush方法的问题。当swf关闭时,是否可以不刷新新数据?我的savegame函数是调用flush方法的唯一函数,它还确定哪个数组在sharedObject数据中的位置。
parentMC.sharedObject.data.moveSpdUpgrade = parentMC.upgrades.tempMoveSpdUpgrade;
parentMC.sharedObject.flush();
但是,当我修改tempMoveSpdUpgrade数组时,即使尚未调用flush,它也会将新数据保存在sharedObject中。
tempMoveSpdUpgrade[0][2] = 1;
trace(parentMC.sharedObject.data.moveSpdUpgrade);
此跟踪显示数据已更改但我不明白,因为尚未调用flush并且swf尚未关闭。我想知道为什么在数组中进行的修改会自动更改sharedObject数据。
感谢您的帮助。
编辑:
public function saveGame(){
parentMC.sharedObject.data.money = parentMC.money;
parentMC.sharedObject.data.moveSpdUpgrade = parentMC.upgrades.tempMoveSpdUpgrade;
parentMC.sharedObject.flush();
}
就像我在hackattack的评论中所述,当我不保存时,钱是正确的数据但是moveSpdUpgrade数组被修改为。
答案 0 :(得分:0)
加载到内存中的sharedObject和保存到光盘的内容是分开的。您正在跟踪内存中的sharedObject。在您刷新此sharedObject之前,它可能不会将其图像保存到光盘。尝试创建一个新的SharedObject并跟踪它,它应该是不同的。
修改强>
我看到我之前告诉你的错误(在评论下面)。我告诉过你使用.concat方法创建一个新的moveSpdUpgrade实例放在你的共享对象中。这不起作用的原因是因为moveSpdUpgrade是一个二维数组,我错过了这个细节。因此,调用.concat会创建一个新实例,但新实例仍然填充了对数组的引用以及您正在编辑的那些数组。所以要解决这个问题,我们必须对moveSpdUpgrade进行深度复制。这是一个将完成
的功能function array2DConcat(target : Array) : Array {
var buff : Array = new Array(target.length);
for(var i : int = 0;i < target.length;i++) }
buff[i] = target[i].concat();
}
return buff;
}
然后如果您将方法更改为
public function saveGame(){
parentMC.sharedObject.data.money = parentMC.money;
parentMC.sharedObject.data.moveSpdUpgrade = array2DConcat(parentMC.upgrades.tempMoveSpdUpgrade);
parentMC.sharedObject.flush();
}
希望这会奏效。
答案 1 :(得分:0)
我认为你对阵列有点混乱。 发生的事情永远不会通过其他功能保存任何数据,或者与代码的其余部分有关。
简单的方法如何尝试复制Sharedobject的数组并不会创建两个单独的Obejcts。相反,您总是在sharedObject-array上工作。
package
{
import flash.display.Sprite;
public class arraytester extends Sprite
{
private var a:Array = new Array(1,2,3,4,5);
private var b:Array = new Array("a","b","c","d","e","f");
public function arraytester()
{
// Both arrays are different Objects
trace(a); // 1,2,3,4,5
trace (b); //a,b,c,d,e,f
// Both arrays are pointing to the same Object
a= b;
trace(a); //a,b,c,d,e,f
trace (b); //a,b,c,d,e,f
b[1] = 2;
trace(a); //a,2,c,d,e,f
trace (b); //a,2,c,d,e,f
// a is a copy of b while becoming a seperate Object
a = b.concat();
b[0]= 1;
trace(a); //a,2,c,d,e,f
trace (b); //1,2,c,d,e,f
}
}
}