我有两个数组,即combo和truecombo。用户通过单击舞台上的各种按钮来填充MovieClip组合,truecombo是正确的组合。
在任何给定点(enterFrame)Flash检查两者是否相同,如果是,则执行一些操作。暂时这是我的代码(改变了几次,比如使用Typecasting索引,在combo [o]结尾处添加.parent等等.2件事情会发生,无论是其中之一。
不满足该语句,此时组合数组的添加和斩波将继续,或者当combo.length = 6时,条件将立即得到满足。检查我的代码。
更新:我有一个包含当前代码的Dropbox文件。点击此处获取FLA link,这里是为了方便和安全而向前删除的SWF link。
/*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;
}
}
这就是我创建truecombo及其内容的方式。
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];
对于缺乏评论感到抱歉,我猜这是不言自明的。提前谢谢。
答案 0 :(得分:0)
我相信combo[o]
&amp; truecombo[o]
是同一类的两个实例&amp;你希望他们匹配。如果是这种情况,您可以考虑:
getQualifiedClassName(combo[o]) == getQualifiedClassName(truecombo[o])
为了与你的方式相匹配,你必须确保位于truecombo内的对象指的是舞台上的对象。不是新的例子。
修改强>
当比赛成功时,你似乎没有打破循环。请改用:
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();
}
}
答案 1 :(得分:0)
这是一个非常简单的循环:
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 th 元素不同,则它们不相等。
最后,检查你的旗帜equal
是否属实,并做任何你想做的事。