ActionScript中的火柴拼图

时间:2017-11-24 21:19:59

标签: actionscript-3 flash puzzle

我想创建一个火柴拼图。但我正在努力解决它。

这个谜题就像这样

enter image description here

玩家必须只移动6场比赛以获得3个方格

他们是这个的两个解决方案

第一个:

enter image description here

第二:

enter image description here

我实际上不知道如何做到这一点。如果有人在这里可以给我任何帮助,我会感激不尽。

提前谢谢。

这是我到目前为止所做的事情

var totalStick:int = 0; //create a var to store how many buttons there are
//loop through each child of the current timeline
var j:int = numChildren;
while(j--){
    //if the child's name starts with 'piece'
    if(getChildAt(j).name.indexOf("piece") == 0){
        //add the click listener
        getChildAt(j).addEventListener(MouseEvent.CLICK, buttonClick,false,0,true);
        totalStick++; //increase the total buttons variable by 1
    }
}
var clickArray:Array = [];

function buttonClick(e:Event):void {

}

创建了一个火柴棍movieclip。

我安排了我的影片剪辑,以形成初始布局并为火柴棍动画片段分配实例名称。然后我为每一个添加了click事件监听器。 现在我想点击将点击的火柴杆移动到“移除”堆。 (单击已移除的火柴杆应将其恢复到原始位置。) 这个想法是玩家只能移动6个火柴棍形成3个方格。 当点击任何火柴棍时,它会像是一样 在底部玩家也可以点击它们将它们返回到他想要的地方。达到6火柴棍后,他不能再删除火柴棍。因此,如果玩家想要移除除已经移除的6个以外的其他人,他必须将6个火柴棍中的一个返回到游戏中或游戏中的位置以便能够移除其他游戏。

1 个答案:

答案 0 :(得分:-1)

我会尝试更一般地提出你的问题。你想要做的是移动一个动画片段,对吧?

我从未在ActionScript中编码,但谷歌搜索" actionscript移动movieclip"已经提供了一些结果,包括this adobe help article on positioningthis adobe help article on animating

后一个链接包含一个非常有用的示例和此描述:

  

脚本动画背后的基本理念是变革需要   要发生这种变化,需要将其分为增量   随着时间的推移。使用a可以很容易地在ActionScript中重复一些东西   常见的循环语句。但是,循环将遍历所有循环   更新显示之前的迭代。要创建脚本动画,   您需要编写反复执行某些操作的ActionScript   随着时间的推移,每次运行时都会更新屏幕。

     

例如,假设您想要创建一个简单的动画,例如   让球穿过屏幕。 ActionScript包含一个简单的   机制,允许您跟踪时间的流逝和更新   相应地屏幕 - 意味着您可以编写移动球的代码   每次少量,直到到达目的地。每次之后   移动屏幕会更新,使跨舞台运动可见   观众。

     

从实际角度来看,同步脚本是有意义的   具有SWF文件帧速率的动画(换句话说,制作一个   每次显示或显示新帧时动画都会改变),   因为它定义了Flash Player或AIR更新的频率   屏幕。每个显示对象都有一个调度的enterFrame事件   根据SWF文件的帧速率 - 每帧一个事件。最   创建脚本动画的开发人员使用enterFrame事件作为   创建随时间重复的动作的方法。你可以编写代码   听取enterFrame事件,将动画球移动一定   每帧的数量,并随着屏幕更新(每一帧),球   将在其新位置重新绘制,创建动作。

import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.MouseEvent; 

// draw a circle and add it to the display list 
var circle:Sprite = new Sprite(); 
circle.graphics.beginFill(0x990000); 
circle.graphics.drawCircle(50, 50, 50); 
circle.graphics.endFill(); 
addChild(circle); 

// When this animation starts, this function is called every frame. 
// The change made by this function (updated to the screen every 
// frame) is what causes the animation to occur. 
function fadeCircle(event:Event):void 
{ 
    circle.alpha -= .05; 

    if (circle.alpha <= 0) 
    { 
        circle.removeEventListener(Event.ENTER_FRAME, fadeCircle); 
    } 
} 

function startAnimation(event:MouseEvent):void 
{ 
    circle.addEventListener(Event.ENTER_FRAME, fadeCircle); 
} 

circle.addEventListener(MouseEvent.CLICK, startAnimation);

所以,基本的想法是每次屏幕更新时都会移动火柴棍。让我们假设您想采用一种非常简单的方法,每当帧更新时,您可以将火柴棍movieclip的y坐标减少一些常量,直到它达到基线(我假设为0)。然后,您可以取消注册事件侦听器,以便它停止移动。

使火柴杆向上移动也会起作用 - 你会检查火柴棍的y坐标是否为0,如果是,则向上移动直到它处于初始位置。

这种方法也是mentioned in this answer

如果您不想为火柴棍制作动画,您也可以在x,y事件监听器中将其位置从x,0设置为buttonClick