Flash 如何执行与gotoAndPlay()和stop()等价的createJS

Flash 如何执行与gotoAndPlay()和stop()等价的createJS,flash,createjs,easeljs,Flash,Createjs,Easeljs,以下是场景: 我正在创建一个信息图形交互动画,它允许用户虚拟设置一个三脚架,与一个虚拟摄像机交互,等等。当一个箭头指向用户应该单击的位置时,我需要时间线停止。然后,单击三脚架(一个movieClip)时,时间轴应恢复播放(三脚架也会设置动画,然后视图切换到使用相机的第一人称)。目前,动画只会永远播放,不会停止任何操作以允许用户交互。以下是我到目前为止的createJS代码: <!DOCTYPE html> <html> <head>

以下是场景: 我正在创建一个信息图形交互动画,它允许用户虚拟设置一个三脚架,与一个虚拟摄像机交互,等等。当一个箭头指向用户应该单击的位置时,我需要时间线停止。然后,单击三脚架(一个movieClip)时,时间轴应恢复播放(三脚架也会设置动画,然后视图切换到使用相机的第一人称)。目前,动画只会永远播放,不会停止任何操作以允许用户交互。以下是我到目前为止的createJS代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>CreateJS export from birdsofprey-anim9c</title>

    <script src="http://code.createjs.com/easeljs-0.6.0.min.js"></script>
    <script src="http://code.createjs.com/tweenjs-0.4.0.min.js"></script>
    <script src="http://code.createjs.com/movieclip-0.6.0.min.js"></script>
    <script src="http://code.createjs.com/preloadjs-0.3.0.min.js"></script>
    <script src="birdsofprey-anim9c.js"></script>

    <script>
    var canvas, stage, exportRoot;

    function init() {
        canvas = document.getElementById("canvas");
        images = images||{};

        var manifest = [
            {src:"images/Bitmap1.png", id:"Bitmap1"},
            {src:"images/Bitmap2.png", id:"Bitmap2"},
            {src:"images/Scene_1.jpg", id:"Scene_1"}
        ];

        var loader = new createjs.LoadQueue(false);
        loader.addEventListener("fileload", handleFileLoad);
        loader.addEventListener("complete", handleComplete);
        loader.loadManifest(manifest);
    }

    function handleFileLoad(evt) {
        if (evt.item.type == "image") { images[evt.item.id] = evt.result; }
    }

    function handleComplete() {
        exportRoot = new lib.birdsofpreyanim11a();

        stage = new createjs.Stage(canvas);
        stage.addChild(exportRoot);
        tripodleg = new lib.LEFT_LEG_MC;
        stage.addChild(tripodleg);
        stage.update();

        createjs.Ticker.setFPS(24);
        createjs.Ticker.addEventListener("tick",f);
        function f(e){
        //var t=this;
        //t.stop();
        //exportRoot.stop();
        var delay = 4000;
        var startTime=createjs.Ticker.getTime();
        createjs.Ticker.getMeasuredFPS();
        if(createjs.Ticker.getMeasuredFPS == 6){
           exportRoot.stop();
           tripodleg.onclick = function(){
               exportRoot.gotoAndPlay(90);
           }
           //exportRoot.gotoAndPlay(90);
            createjs.Ticker.removeEventListener("tick",f);
            }
        }
        createjs.Ticker.addEventListener("tick", stage);
    }

    </script>
    </head>

    <body onload="init();" style="background-color:#D4D4D4">
        <canvas id="canvas" width="550" height="540" style="background-
    color:#ffffff"></canvas>
    </body>
    </html>

CreateJS从birdsofprey-anim9c导出
var画布、stage、exportRoot;
函数init(){
canvas=document.getElementById(“canvas”);
图像=图像| |{};
变量清单=[
{src:“images/Bitmap1.png”,id:“Bitmap1”},
{src:“images/Bitmap2.png”,id:“Bitmap2”},
{src:“images/Scene_1.jpg”,id:“Scene_1”}
];
var loader=new createjs.LoadQueue(false);
loader.addEventListener(“文件加载”,handleFileLoad);
加载器。添加事件列表器(“完成”,handleComplete);
loader.loadManifest(清单);
}
功能手柄文件负载(evt){
如果(evt.item.type==“image”){images[evt.item.id]=evt.result;}
}
函数handleComplete(){
exportRoot=new lib.birdsofpreyanim11a();
stage=newcreatejs.stage(画布);
stage.addChild(exportRoot);
tripodleg=新的库左腿MC;
阶段。addChild(三脚架);
stage.update();
createjs.Ticker.setFPS(24);
createjs.Ticker.addEventListener(“勾号”,f);
函数f(e){
//var t=这个;
//t、 停止();
//exportRoot.stop();
var延迟=4000;
var startTime=createjs.Ticker.getTime();
createjs.Ticker.getMeasuredFPS();
如果(createjs.Ticker.getMeasuredFPS==6){
exportRoot.stop();
tripodleg.onclick=函数(){
exportRoot.gotoAndPlay(90);
}
//exportRoot.gotoAndPlay(90);
createjs.Ticker.removeEventListener(“勾选”,f);
}
}
createjs.Ticker.addEventListener(“勾号”,阶段);
}
提前感谢StackOverflow,感谢他们所属的超级程序员的专业知识-qs
[EDIT]这次再次更新了我的代码,通过addChild()将我的tripod MovieClip的一个实例添加到舞台上并通过exportRoot.stop()停止时间线exportRoot没有停止,有什么线索吗?提前谢谢。

我猜你是在说台词:

function handlClick(){
    mc.play(2);
}
如果是这样,只需使用
gotoAndPlay(2)
而不是
play
。EaselJS最初是基于ActionScript语言的,所以它反映了很多功能。看看这本书

需要注意的一点是:在
handlTick
方法中,什么是
createjs.Ticker.tick
?没有勾号属性,只有“勾号”事件。其中的if语句将永远不会为
true
。你到底想用这些代码做什么?您是否希望在主剪辑到达第30帧时添加单击处理程序?还是在30“滴答”之后?不管怎样,这都不会起作用

希望有帮助

[根据更新进行编辑]

看起来您已将其更改为使用
gotoAndPlay
,但存在一些问题:

您正在调用一个全局
gotoAndPlay
函数(该函数不存在),而不是以MovieClip实例为目标。如果您的主时间线有您想要进入的框架,请使用
exportRoot.gotoAndPlay(90)

接下来,您将调用
this.stop()
。您的事件侦听器是匿名的(这很好),但这意味着
窗口
。同样,没有全局的
stop
方法——因此您应该在希望停止的时间线上调用它。在本例中,可能是
exportRoot.stop()


干杯,

您提到:“没有滴答属性,只有一个“滴答”事件。”是的,这也是我所怀疑的,谢谢更新。您说:“您正在寻找在主剪辑达到30时添加的点击处理程序吗?”…没错。我希望整个时间线停在第30帧,而不是时间线上的MC。我看了一下Ticker.setPause(true)的例子,但它只是让我头晕目眩。也许可以为FPS设置一个var,告诉Ticker同步到时间线的帧速率,对吗?谢谢你告诉我这些错误,请让我知道如何停止();我试图在第30帧创建的动作。再次感谢您的帮助,万分感谢-它仍然没有停止。有什么建议吗?谢谢,-上面的答案。这听起来是个不错的解决办法。我更改了createJS.HTML文件中的代码。现在它只是停下来,停下来后点击什么也不做。你知道exportRoot文档的链接吗?在这里我可以看到它的所有相关方法的列表?再次感谢你,兰尼-qs
function handlClick(){
    mc.gotoAndPlay(2);
}