zoukankan      html  css  js  c++  java
  • easelJS

    easelJS - Cache_vday

    $(function() {
        init();
    });
    // Cache_vday
    
    var canvas;
    var stage;
    var container;
    var captureContainers;
    var captureIndex;
    
    function init(e) {
        
        canvas = document.getElementById('demo1');
        stage = new createjs.Stage(canvas);
        
        var w = canvas.width;
        var h = canvas.height;
        
        container = new createjs.Container();
        stage.addChild(container);
        container.name = "cname";
        
        captureContainers = [];
        captureIndex = 0;
        
        for(var i=0;i<1;i++){ // i<1就看一个的轨迹;但是还是会有多个显示出来;
            var heart = new createjs.Shape();
            heart.graphics.beginFill(createjs.Graphics.getHSL(Math.random()*30-45,100,50+Math.random()*30));
            heart.graphics.moveTo(0,-9).curveTo(0,-20,8,-20).curveTo(16,-20,16,-10).curveTo(16,0,0,12);
            heart.graphics.curveTo(-16,0,-16,-10).curveTo(-16,-20,-8,-20).curveTo(0,-20,0,-9);
            heart.y = -100;
            
            container.addChild(heart);
        }
        
        var text = new createjs.Text("the longer I'm with you
    the more I love you","bold 24px Arial","#312");
        text.textAlign = "center";
        text.x = w/2;
        text.y = h/2;
        stage.addChild(text);
        
        for(i=0;i<100;i++){ // 这个如果i<10,就会看到其轨迹;
            var captureContainer = new createjs.Container();
            captureContainer.name = "cname"+i; // ADD 设置一个名字;
            captureContainer.cache(0,0,w,h); // 缓存的内容是什么东西?
            captureContainers.push(captureContainer);
        }
        
        createjs.Ticker.addEventListener("tick",tick);
        createjs.Ticker.setFPS(30);
    }
    
    function tick(event) {
        var w = canvas.width;
        var h = canvas.height;
        var l = container.getNumChildren();
        console.log("container.getNumChildren() is : "+container.getNumChildren());
        if(l>1){
            console.log("l > 1"); // l始终等于1;为什么界面上面会有两个以上的心形标记?而且心的速度也是一样的;
        } // 为什么会有两个以上? 表面上看着是心在动,实际是不停的播放不同的图片container,当heart.y<-50的时候,会重新设置一下heart;
          // 每一个heart经过屏幕的时候,被100个container依次给cache了;
        
        captureIndex = (captureIndex+1)%captureContainers.length;
        console.log("stage.getChildAt(0) is : "+stage.getChildAt(0)); // ADD 看看是什么东西,是Container;
        console.log("stage.getNumChildren() is : "+stage.getNumChildren()); // ADD 看看有多少个孩子? 始终是2个孩子;
        stage.removeChildAt(0); // 移除了谁?移除了container
        var captureContainer = captureContainers[captureIndex];
        stage.addChildAt(captureContainer, 0); // 每次都往0位置上面添加?是的;
        captureContainer.addChild(container); // 再把container作为孩子加了进来;
        
        for(var i=0;i<l;i++){
            var heart = container.getChildAt(i);
            if(heart.y < -50){ // 第一次重新处理一下坐标;不仅仅执行一次;当y坐标逐渐递减小于-50的时候,就需要重新执行一下;
                console.log("this is reset y");
                heart._x = Math.random()*w;
                heart.y = h*(1+Math.random())+50; // 重新修正y坐标;
                heart.perX = (1+Math.random())*h;
                heart.offX = Math.random()*h;
                heart.ampX = heart.perX*0.1*(0.2+Math.random());
                heart.velY = -Math.random()*2-2;
                heart.scaleX = heart.scaleY = Math.random()+1;
                heart.rotation = Math.random()*40-20;
                heart.alpha = Math.random();
            }
            heart.y += heart.velY; // 每次减少一下y坐标;
            heart.x = heart._x+Math.cos((heart.offX+heart.y)/heart.perX*Math.PI*2)*heart.ampX;
        }
        
        captureContainer.updateCache("source-over");
        
        stage.update(event);
    }
  • 相关阅读:
    openGL线s的绘制
    openGL绘制正方形
    openGL的使用步骤
    [归并排序][逆序数]Brainman
    [动态规划]Tak and Cards
    [STL][stack]简单计算器
    [题解]2018湘潭邀请赛
    [数论][组合数学]Iroha and a Grid
    [STL][stack]括号配对问题
    [简单思维题]Sequence(山东省第九届ACM大学生程序设计竞赛E题)
  • 原文地址:https://www.cnblogs.com/stono/p/5706303.html
Copyright © 2011-2022 走看看