zoukankan      html  css  js  c++  java
  • FLASH CC 2015 CANVAS (六)如何像FLASH那样实现场景(多canvas)

    注意 此系列贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新。

    swf 项目中,我们可以很容易在一个fla文档里创建多场景。也可以通过多个fla文件发布多个swf项目调用形成一个多场景动画(网站)

    但是在CANVAS 项目中,却发现无法插入场景。(如果你是通过swf 项目转换成canvas 项目,在转换的时候会发现每个场景都自动转换成了一个canvas文档)。所以场景我们目前看来是用不了,那就只剩一条路:多个canvas文档相互调用。

    swf项目中 多个场景调用我们一般都会有一个主swf用来管理 所有子swf、管理全局参数、函数。

    canvas项目 我们管理所有canvas、全局参数、函数应该在html文件里面。

    我们在FLASH CC里每个发布的canvas项目 都会有一个html文件。那么我们应将这些html"合并"成一个。

    最近几天有项目做,所以这篇只能抽空写大家见谅

    我们看到每个html的js中 都包含:

    canvas,stage,exportRoot
    

    canvas 、stage 很好理解,也就不再多说。exportRoot通过前面的文章中你应该也明白了他是管理我们FLASH中所有 函数,元件的地方,方便我们调用,

    其次在html的js中你们还能看到:

    images= images||{};
    //
    loader.loadManifest(lib.properties.manifest);

    这里的images 对应着你fla 文档发布设置中的①,lib对应着你fla文件发布设置中的② 如下图

    通过前面的几篇开荒教程你已经发现每个FLASH CC导出的动画中,canvsa 和 stage 并不会发生改变,只有exportRoot 会根据每个fla文件而不一样。那么我们可不可以使用一个canvas, 和stage 来完成多个FLASH CC 导出的canvas动画呢?

    我们先改变一下:上图中 lib名字改为 lib0 ,上图中 imgages名字改为 img0 

    发布测试,发现html中js 代码有变化:img0,和 lib0 

    img0 = img0||{};
    //
    loader.loadManifest(lib0.properties.manifest);

    想信你看到这里,都已经能够将多个FLASH CC导出的canvas动画放到一个HTML页面了。

    但是这样会放入很多canvas,这并不是我想要的,我只想使用一个canvas。

    那么就需要一点代码基础了,这里我就不将代码逻辑,直接上代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>main</title>
    <style>
    body{margin:0px;}
    </style>
    
    <script src="js/jquery-1.11.1.min.js"></script>
    <script src="libs/easeljs-0.8.1.min.js"></script>
    <script src="libs/tweenjs-0.6.1.min.js"></script>
    <script src="libs/movieclip-0.8.1.min.js"></script>
    <script src="libs/preloadjs-0.6.1.min.js"></script>
    <script src="s0.js"></script>
    <script src="s1.js"></script>
    <script>
    var onPage=0,totalPage=2,ldPage=0
    var canvas,stage,exportRoot=[],ld,S=this
    
    $(document).ready(function(e) {
        canvas = document.getElementById("canvas");
        //
        stage = new createjs.Stage(canvas);
        createjs.Ticker.setFPS(24);
        createjs.Ticker.addEventListener("tick", stage);
    });
    window.onload=function()
    {
        inIt()
        loadPage(0)
    }
    
    function inIt()
    {
        ld = new createjs.LoadQueue(false);
        ld.addEventListener("fileload", loaded);
        ld.addEventListener("complete", loadComplete);
    }
    
    function loadPage()
    {
        console.log(ldPage)
        $["img"+ldPage] = $["img"+ldPage]||{};
        ld.loadManifest(S["lib"+ldPage].properties.manifest);
    }
    function loaded(e)
    {
        if (e.item.type == "image") { S["img"+ldPage][e.item.id] = e.result; }
    }
    function loadComplete(e)
    {
        exportRoot[ldPage] = new S["lib"+ldPage]["s"+ldPage]();//s+ldPage是fla名字
        stage.addChild(exportRoot[ldPage]);    
        exportRoot[ldPage].gotoAndStop(2);
        
        if(ldPage<totalPage-1)
        {    
            ldPage++;
            loadPage(ldPage);
        }
        else
        {    
            ld.removeEventListener("fileload", loaded);
            ld.removeEventListener("complete", loadComplete);
            ld=null;
            console.log("Load finish!")    
        }
    }
    
    </script>
    </head>
    
    <body>
        <canvas id="canvas" width="640" height="1136" style="background-color:#333333"></canvas>
    </body>
    </html>

    说明:

    1) 自己修改JQuery的路径

    2) 我用FLASH CC发布了2个canvas动画,fla分别命名为s0,s1 

    3)我每个动画 是从第3帧开始的(js 是第二帧)

    4)发布设置中 分别设置了 lib0,img0 和 lib1,img1

    5)将导出的js都引入到这文件里面

    大功告成,2个动画(场景)成功的利用一个canvas 展现了出来。

    PS:这样的做法我到目前没有发现冲突以及因为这样做的BUG,如果 有朋友发现。请回帖 3Q

  • 相关阅读:
    OO第四单元单元总结
    OO第三单元单元总结
    OO第二单元单元总结
    OO第一单元单元总结
    Java虚拟机解释器与编译器
    20155321 《Java程序设计》实验三 敏捷开发与XP实践
    20155321 2016-2017-2 《Java程序设计》第十周学习总结
    20155321 2016-2017-2 《Java程序设计》第九周学习总结
    20155321实验二 Java面向对象程序设计
    20155321 2016-2017-2 《Java程序设计》第八周学习总结
  • 原文地址:https://www.cnblogs.com/luoeeyang/p/4702696.html
Copyright © 2011-2022 走看看