如何在拼图解决时停止计时器并移动到下一个场景

时间:2017-11-29 15:06:37

标签: actionscript-3 flash timer

我在动作脚本中创建了一个拼图并将其保存为一个单独的类。在项目中我链接了代码,我在场景中添加了一个计时器,以便玩家必须在指定的时间内解决难题。现在我想要的是,如果玩家正确解决了拼图,计时器将停止并转到下一个场景。

这就是puzzle.as

var xpos:Array=new Array();
var ypos:Array=new Array();
var numDone,i:int;
var numPieces:int=3;
var dif:int=25; //how close do they have to drag the piece
var sound:Sound=new Sound();
function playSound(file:String): void {
    //var sound:Sound=new Sound();
    var req:URLRequest=new URLRequest(file);
    sound.load(req);
    sound.play();
} //playSound

function scramble(): void {
    for(i=0;i<numPieces;i++){
        this["piece"+i].x=Math.random()*300;
        this["piece"+i].y=Math.random()*500; 
        this["piece"+i].alpha=.8;
    } //for each piece
    numDone=0;
    txtMessage.text="Drag the pieces to solve the puzzle";
    sound.close();
} //scramble
function init(): void {
    for(i=0;i<numPieces;i++){
        xpos[i]=this["piece"+i].x;
        ypos[i]=this["piece"+i].y;
        this["piece"+i].addEventListener(MouseEvent.MOUSE_DOWN, beginMove);
        this["piece"+i].addEventListener(MouseEvent.MOUSE_UP, endMove);
    } //for each piece
    txtMessage.text="Drag the pieces to solve the puzzle";
} //init
function beginMove(e:MouseEvent): void {
    if(e.target.alpha<1)
     e.target.startDrag();
} //beginMove
function endMove(e:MouseEvent): void {
    if(e.target.alpha<1) {
        e.target.stopDrag();
        //figure out which piece it is
        var piece:int=0;
        while(e.target!=this["piece"+piece]){
            piece++;
        } //
        var curX:int=this["piece"+piece].x;
        var curY:int=this["piece"+piece].y;
        if(curX<=xpos[piece]+dif && curX>=xpos[piece]-dif && 
            curY<=ypos[piece]+dif && curY>=ypos[piece]-dif) { //close enough
            this["piece"+piece].x=xpos[piece];
            this["piece"+piece].y=ypos[piece];
            this["piece"+piece].alpha=1;
            numDone++;
            if(numDone>=numPieces) gameOver();
            else playSound("http://www.zebra0.com/langResource/ok.mp3");
        } //in position
    } //not already done
}//endMove
function gameOver(): void {
    txtMessage.text="You did it!";
    playSound("http://www.zebra0.com/langResource/win.mp3");
    gotoAndStop(1,"Scene 2");
} //gameOver

function scrambleHandler(e:MouseEvent): void {
    scramble();
} //clickHandler

btnScramble.addEventListener(MouseEvent.CLICK,scrambleHandler);
function solve(e:MouseEvent): void {
    for(i=0;i<numPieces;i++) {
        this["piece"+i].x=xpos[i];
        this["piece"+i].y=ypos[i];
        this["piece"+i].alpha=1;
    } //for each piece
} //solve

将puzzle.as链接到项目的代码。我保留在一个名为“ActionScript&#39;

”的图层中
include "Puzzle.as"
numPieces=20;
init();
scramble();
stop();

计时器代码我保存在名为&#39; action&#39;

的图层中
var nCount:Number = 90;
var myTimer:Timer = new Timer(1000, nCount);

timer_txt.text = nCount.toString();
myTimer.start();

myTimer.addEventListener(TimerEvent.TIMER, countdown);
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onComplete);
function countdown(e:TimerEvent):void
{
    nCount--;
    timer_txt.text = nCount.toString();
}
function onComplete(e: TimerEvent):void{
    gotoAndStop(35);
}

如果有人知道如何实现这一点。

0 个答案:

没有答案