所以我的ovenScreen.mcChar
影片剪辑中有5帧。每个都是玩家可以解锁的角色。如果玩家有足够的硬币,那么他们可以进入奖品屏幕以获得随机可解锁的角色。
到目前为止,它是如何设置的:
private function getPrizeHandler(e:MouseEvent):void
{
//Check if prize is locked or unlocked then unlock item/ loop through random number frames
frameLoop = randomNumber(1, 5);
ovenScreen.mcChar.gotoAndStop(frameLoop);
if (frameLoop == 1 && !sharedObjectCharacters.data.sharedHotDog)
{
sharedHotDog = true;
sharedObjectCharacters.data.sharedHotDog = sharedHotDog;
sharedObjectCharacters.flush ();
}else
if (frameLoop == 2 && !sharedObjectCharacters.data.sharedTaco)
{
sharedTaco = true;
sharedObjectCharacters.data.sharedTaco = sharedTaco;
sharedObjectCharacters.flush ();
}else
if (frameLoop == 3 && !sharedObjectCharacters.data.sharedDonut)
{
sharedDonut = true;
sharedObjectCharacters.data.sharedDonut = sharedDonut;
sharedObjectCharacters.flush ();
}else
if (frameLoop == 4 && !sharedObjectCharacters.data.sharedCoffee)
{
sharedCoffee = true;
sharedObjectCharacters.data.sharedCoffee = sharedCoffee;
sharedObjectCharacters.flush ();
}else
if (frameLoop == 5 && !sharedObjectCharacters.data.sharedPancakes)
{
sharedPancakes = true;
sharedObjectCharacters.data.sharedPancakes = sharedPancakes;
sharedObjectCharacters.flush ();
}
////////////////////////////////////////
ovenScreen.gotoAndPlay(2); //play animations
TweenLite.delayedCall(3.5, prizeConfettie);
ovenScreen.removeEventListener(MouseEvent.CLICK, getPrizeHandler);
}
正如你所看到的,我有一个变量frameLoop
,这是一个从1到5的随机数。因此解锁的角色将是随机的,并显示随机解锁的角色。我使用if语句检查随机数是否落在该特定帧上,而不是解锁它然后将其解锁并保存数据。
现在这一切都运行正常但是如果项目已经解锁以排序不同的帧号,我怎么能去修复它呢?因此,如果frameLoop落在2并且该角色已经解锁,则重复随机帧编号,直到它落在锁定的角色上。我正在考虑建立一个数组,也许这种方法可能是合乎逻辑的,但不知道如何去做。
任何帮助将不胜感激。
共享对象的其他信息布尔值:
private function allSharedObjectBooleans():void
{
sharedObjectCharacters = SharedObject.getLocal("Characters");
sharedHotDog = sharedObjectCharacters.data.sharedHotDog != null ? sharedObjectCharacters.data.sharedHotDog : false;
sharedTaco = sharedObjectCharacters.data.sharedTaco != null ? sharedObjectCharacters.data.sharedTaco : false;
sharedDonut = sharedObjectCharacters.data.sharedDonut != null ? sharedObjectCharacters.data.sharedDonut : false;
sharedCoffee = sharedObjectCharacters.data.sharedCoffee != null ? sharedObjectCharacters.data.sharedCoffee : false;
sharedPancakes = sharedObjectCharacters.data.sharedPancakes != null ? sharedObjectCharacters.data.sharedPancakes : false;
}
我按照这样创建它们:
//shared Booleans
private var sharedHotDog:Boolean;
private var sharedTaco:Boolean;
private var sharedDonut:Boolean;
private var sharedCoffee:Boolean;
private var sharedPancakes:Boolean;
答案 0 :(得分:2)
如果角色已解锁,则增加变量。如果它超出了可解锁实体的数量(大于可解锁实体的数量),则将其设置为1.如果它循环遍历所有字符并且它们都已解锁,则执行其他操作。你已经有了一系列的排序,它只是位于sharedObjectCharacters.data
,它的索引是字符串,而不是int。但是这可以通过提供从int到string的映射并使用this[string]
语法来检查属性来解决。一个例子:
const strUnlockables:Array=["Noone","sharedHotDog","sharedTaco","sharedDonut","sharedCoffee","sharedPancakes"];
const unlockables:int=5;
private function getPrizeHandler(e:MouseEvent):void {
var f:int=randomNumber(1,5); //frameLoop
for (var i:int=0;i<unlockables;i++) { // check all unlockables, starting with f'th
if (sharedObjectCharacters.data[strUnlockables[f]]===false) {
// this "f" is the one to unlock
sharedObjectCharacters.data[strUnlockables[f]]=true;
sharedObjectCharacters.flush();
ovenScreen.mcChar.gotoAndStop(f);
ovenScreen.gotoAndPlay(2); //play animations
TweenLite.delayedCall(3.5, prizeConfettie);
break;
}
f++;
if (f>unlockables) f=1; // loop around
}
// if we're here, we either did a break, or have all characters unlocked
ovenScreen.removeEventListener(MouseEvent.CLICK, getPrizeHandler); // clean up
}