我有一个游戏,在我完成某个级别之后,我将该级别的名称放在一个数组中并将该数组保存到SharedObject(SO)。但不知怎的/某处我弄乱了东西,因为在关闭并再次打开游戏之后,我加载SO数据(解锁我已经通过的级别)并且它(加载的数据)总是搞砸了并且没有加载它应该的东西加载(有时它甚至会给我带来一些错误。)
代码并不是那么困难,但我一直在关注它,我需要新眼睛才能看到明显的错误。 的 *********** EDIT ********** 所以SO的代码就是这个
public class LevelsData extends SharedObject
{
public static var LEVELS_DATA:SharedObject = SharedObject.getLocal("save_poi71");
public static function get LoadNamesOfLevelPassed():Array
{
var myLevelsArr:Array = [];
if( LEVELS_DATA.data.PlayedLevels_arr == undefined)
{
myLevelsArr.length = 0;
}
else
{
myLevelsArr = LEVELS_DATA.data.PlayedLevels_arr;
}
return myLevelsArr;
}
public static function set SaveLevel_Names( nameOfLevelPassed:Array ):void
{
LEVELS_DATA.data.PlayedLevels_arr = nameOfLevelPassed;
LEVELS_DATA.flush();
}
}
游戏中的代码就是这个
.
.
.
.
private function didWePlaySameLevel():void
{
var namesPlayed_arr:Array = LevelsData.LoadNamesOfLevelPassed;
var namesTotal:int = namesPlayed_arr.length;
if( namesTotal == 0 )
{
trace(" ScreenInGame_2 | didWePlaySameLevel | namesTotal == 0 so we push Level_1");
namesPlayed_arr.push( Moving_Picture_Name );
LevelsData.SaveLevel_Names = namesPlayed_arr;
sameLevel = false;
}
else if( namesTotal != 0 )
{
for( var i:int = 0; i < namesTotal; i++)
{
trace(" ScreenInGame_2 | didWePlaySameLevel | " + Moving_Picture_Name + " ?==? " + namesPlayed_arr[ i ] );
trace(" ScreenInGame_2 | didWePlaySameLevel | namesPlayed_arr.length = " + namesPlayed_arr.length);
if( Moving_Picture_Name != namesPlayed_arr[ i ] )
{
trace(" ScreenInGame_2 | didWePlaySameLevel | " + Moving_Picture_Name + " != " + namesPlayed_arr[ i ] );
namesPlayed_arr.push( Moving_Picture_Name );
LevelsData.SaveLevel_Names = namesPlayed_arr;
sameLevel = false;
trace(" ScreenInGame_2 | didWePlaySameLevel | namesPlayed_arr.length = " + namesPlayed_arr.length);
}
}
}
}
.
.
.
if( levelsToUnlock < totalLevels && sameLevel == false )
{
trace("ScreenInGame | unlockOneMoreLevel | we UNLOCK 1 more level" );
unlockNextLevel();
}
***编辑问题:
有些我如何找到解决我的第一个问题的方法,但现在有一个新问题,那就是:
当来自SO的数组是!= 0时,我进入 else if 语句。在那里我比较数组中的任何变量是否具有 Moving_Picture_Name 的相同名称,如果它们没有,那么我设置 sameLevel = false 。问题是,如果我说我之前已经通过/播放了5个级别(Level_1,Level_2,Level_3,Level_4,Level_5),并且让我说我再次开始播放 Level_2 它会告诉我这个:
Level_2!= Level_1 - &gt;它会将自己推入数组并更新数据
Level_2 == Level_2 - &gt;它什么都不做
Level_2!= Level_3 - &gt;它会将自己推入数组并更新数据
Level_2!= Level_4 - &gt;它会将自己推入数组并更新数据
Level_2!= Level_5 - &gt;它会将自己推入数组并更新数据
所以它实际上会推送数组中已存在的4个元素。
***问题:
那么如果newLevel的名称不在该Array中(我保存名称的那个),我该如何推送newLevel呢?如果该名称已存在于Array中,我该怎么办?