如何遍历帧号,如果为真则忽略该帧号?
Posted
技术标签:
【中文标题】如何遍历帧号,如果为真则忽略该帧号?【英文标题】:How to loop through frame number and if true then ignore that frame number? 【发布时间】:2016-12-08 18:27:04 【问题描述】:大家好,所以我正在努力寻找解决这种情况的最佳方法。
所以我的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);
如您所见,我有一个 var 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;
【问题讨论】:
【参考方案1】:如果角色已经解锁,则增加变量。如果它过火(大于可解锁实体的数量),请将其设置为 1。如果它循环遍历所有字符并且它们都已解锁,则执行其他操作。你已经有一个数组,它只是位于sharedObjectCharacters.data
,它的索引是字符串,而不是整数。但这可以通过提供从 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
【讨论】:
嘿 Vesper 非常感谢你的解释和解释。我现在要玩弄它,看看我能不能让它工作。如果我遇到任何问题,如果没关系,我会告诉你的。谢谢。一个问题是 strUnlockables:Array 正确地保存了我的 sharedObject 布尔值吗? 我遇到的问题是当我播放 if 语句时从未考虑过/我在 if 语句中添加了一条跟踪,并且从未调用过它。不知道可能是什么问题。 sharedHotDog、sharedTaco 等......都是我设置为 false 的布尔值。有什么想法会发生什么?strUnlockables
仅包含字符串,即共享对象中这些布尔值的 名称。请检查您在任何地方写这些字符串时是否犯了错误(我可以)。作为第二个可能的原因,sharedObjectCharacters
在此代码中不可访问。请在 if 语句之前执行trace(f,strUnlockables[f],sharedObjectCharacters.data[strUnlockables[f]])
,以检查迭代时是否出现所有数据。
好的,这就是我在跟踪中得到的结果:5 sharedPancakes undefined 1 sharedHotDog undefined 2 sharedTaco undefined 3 sharedDonut undefined 4 sharedCoffee undefined
所以也许我在别处写字符串时犯了一个错误。我会继续检查错误。我将使用有关如何设置共享对象布尔值的更多信息来更新我的问题。如果您可以看看我是否在上面做错了什么,我将非常感谢 Vesper。你的男人。以上是关于如何遍历帧号,如果为真则忽略该帧号?的主要内容,如果未能解决你的问题,请参考以下文章
Maxscript netrender 文件名 - 尝试在不附加帧号的情况下保存
在具有 2^20 字节物理内存和 4KB 页面大小的 32 位系统上,页帧号需要多少位?