我有两个数组,即combo和truecompo。用户通过点击舞台上的各种按钮,用MovieClips填充组合,truecomport是正确的组合。
在任何给定的点(enterFrame)Flash都在检查两者是否相同,如果是,那么就做一些事情。就目前而言,这是我的代码(修改了好几次,比如用Typecasting索引,在combo[o]的末尾添加.Pparent等。会发生两件事,要么一件,要么另一件。
要么不满足该语句,此时将继续添加和剪切组合数组,要么在combo.length=6时立即满足该条件。检查我的代码。
更新:我有一个包含当前代码的dropbox文件。点击这里查看FLA链接,这里是SWF链接,为了方便和安全,它一如既往地被删除了
/*stage.*/addEventListener(Event.ENTER_FRAME, checkthis);
function checkthis(e:Event)
{
for(var o:int=0;o<= combo.length; o++)
{
if((combo[o] == truecombo[o]) && (combo.length==truecombo.length))
{
equal=true;
}
}
if (equal==true)
{
stage.removeEventListener(Event.ENTER_FRAME, checkthis);
endSeq();
}
}
function endSeq():void
{
bravo.play();
for (var i:int = 0; i < combo.length; i++)
{
var element:DisplayObject = combo[i];
element.parent.removeChild(element);
}
firebb.gotoAndPlay(2);
windbb.gotoAndPlay(2);
spiritbb.gotoAndPlay(2);
earthbb.gotoAndPlay(2);
}
这就是我将新元素推送到组合数组的方式。
function add(element:DisplayObject)
{
twist.gotoAndPlay(2);
element.width = WIDTH;
element.height = HEIGHT;
if (this.combo.length >= MAX_ELEMENTS)
{
removeChild(this.combo.shift());
}
this.combo.push(element as DisplayObject);
this.addChild(element);
this.reorder();
}
function reorder()
{
for (var i:int = 0; i < combo.length; i++)
{
var element:DisplayObject = combo[i];
element.x = OFFSET_X + (i * SEP_X);
element.y = OFFSET_Y;
}
}
这就是我创建truecomport及其内容的方式。
var fireb:firebtn = new firebtn();
var spiritb:spiritbtn = new spiritbtn();
var earthb:earthbtn = new earthbtn();
var windb:windbtn = new windbtn();
var combo:Array=new Array();
const truecombo:Array = [fireb,windb,spiritb,windb,earthb,fireb];
很抱歉没有评论,我想这是不言自明的。提前谢谢。
我相信combo[o]
&CCD_ 2是同一类的两个实例&你希望他们匹配。如果是这种情况,您可以考虑:
getQualifiedClassName(combo[o]) == getQualifiedClassName(truecombo[o])
为了匹配你所做的方式,你必须确保truecomport中的对象引用的是舞台上的相同对象&而不是新实例。
编辑:
当比赛成功时,你似乎没有打破循环。使用这个替代:
function checkthis(e:Event)
{
for(var o:int=0;o<= combo.length; o++)
if((combo[o] == truecombo[o]) && (combo.length==truecombo.length)) {
equal=true;
break;
}
if (equal) {
stage.removeEventListener(Event.ENTER_FRAME, checkthis);
endSeq();
}
}
这里有一个非常简单的循环:
var equal:Boolean=true
if(combo.length == truecombo.length) {
for(var i:int=0; i<combo.length; i++) {
if(combo[i] != truecombo[i]) {
equal=false;
break;
}
}
} else {
equal=false;
}
if(equal) {
//do whatever
}
这是假设两者相等,直到我们发现其他情况。因此,如果长度不同,它们就不相等。如果第i个元素不同,则它们不相等。
最后,你检查你的标志equal
是否为真,然后做你想做的任何事情