我已经制作了一个flash应用程序,在这个flash应用程序中,我已经包含了一个拼图游戏。应用程序在一个时间轴上写入,某些帧用作应用程序中的不同页面。
问题是,一旦移动拼图拖放,棋子就会显示在所有画面上,而不仅仅是我创建的一个拼图画框。
如何让这些拖放项目不显示在其他框架上?
这是我用于拼图游戏的代码。
var hitArray:Array = new Array(Tar1_mc,Tar2_mc,Tar3_mc,Tar4_mc,Tar5_mc,Tar6_mc);
var dropArray:Array = new Array(Piece1_mc,Piece2_mc,Piece3_mc,Piece4_mc,Piece5_mc,Piece6_mc);
var positionsArray:Array = new Array();
for (var i:int = 0; i < dropArray.length; i++)
{
dropArray[i].buttonMode = true;
dropArray[i].addEventListener(MouseEvent.MOUSE_DOWN, mdown);
dropArray[i].addEventListener(MouseEvent.MOUSE_UP, mUp);
positionsArray.push({xPos:dropArray[i].x, yPos:dropArray[i].y});
}
function mdown(e:MouseEvent):void
{
e.currentTarget.startDrag();
setChildIndex(MovieClip(e.currentTarget), numChildren - 1);
}
function mUp(e:MouseEvent):void
{
var dropIndex:int = dropArray.indexOf(e.currentTarget);
var target:MovieClip = e.currentTarget as MovieClip;
target.stopDrag();
if (target.hitTestObject(hitArray[dropIndex]))
{
target.x = hitArray[dropIndex].x;
target.y = hitArray[dropIndex].y;
}
else
{
target.x = positionsArray[dropIndex].xPos;
target.y = positionsArray[dropIndex].yPos;
}
}
reset_btn.addEventListener(MouseEvent.CLICK, backObjects);
function backObjects(e:MouseEvent):void
{ for(var i:int = 0; i < dropArray.length; i++){
if(dropArray[i].x == hitArray[i].x && dropArray[i].y == hitArray[i].y){
dropArray[i].x = positionsArray[i].xPos;
dropArray[i].y = positionsArray[i].yPos;
}
}
}
提前感谢您提供的任何帮助。
答案 0 :(得分:0)
在创建游戏时,您应该尝试使用外部类。但是为了解决您的问题,您可以在进入某个框架时从舞台上移除这些碎片。因此,在框架中,您希望它们消失,您可以编写以下内容:
for(var i:int = 0; i < dropArray.length; i++){
if(this != null && this.contains(dropArray[i])){
removeChild(dropArray[i]);
}
}
如果你需要回到这个框架,你可以切换每个拼图块的visiblabilty属性。你会循环,但只会像这样改变可见性:
dropArray[i].visible = false;