与KineticJS HTML5画布上跳跃的兔子

在这个实验中,我们将创建一个群与KineticJS跳跃的兔子。
产品说明:mousedown在画布上添加大量更多的兔子。
<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
      
    </style>
  </head>
  <body>
    <div id="container"></div> 
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.0.1.min.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script src="http://www.html5canvastutorials.com/lib/stats/stats.js"></script>
    <script defer="defer">
      $(document).ready(function() {
        // wait 2 seconds before starting
        setTimeout(onReady, 2000);
      });
      
      $(window).resize(resize)
      window.onorientationchange = resize;
      
      var lastTime = 0;
      var vendors = ['ms', 'moz', 'webkit', 'o'];
      for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
          window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
          window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
                                     || window[vendors[x]+'CancelRequestAnimationFrame'];
      }
      if (!window.requestAnimationFrame)
          window.requestAnimationFrame = function(callback, element) {
              var currTime = new Date().getTime();
              var timeToCall = Math.max(0, 16 - (currTime - lastTime));
              var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
                timeToCall);
              lastTime = currTime + timeToCall;
              return id;
          };
      window.requestAnimFrame = window.requestAnimationFrame;
      
      var width = 480;
      var height = 400;
      
      var wabbitTexture;
      var pirateTexture;
      
      var bunnys = [];
      var gravity = 0.75//1.5 ;
      
      var maxX = width;
      var minX = 0;
      var maxY = height;
      var minY = 0;
      
      var startBunnyCount = 10;
      var isAdding = false;
      var count = 0;
      var container;
      var layer;
      var easelLogo;
      var clickImage;
      
      var amount = 10;
      
      function onReady()
      {
          stage = new Kinetic.Stage({
              container: "container",
              width: $(window).width(),
              height: height,
          });
          layer = new Kinetic.Layer();
          stage.add(layer);
          stats = new Stats();
          
          wabbitTexture = new Image();
          wabbitTexture.onload = function() {
              _handleTextureLoaded();
          }
          wabbitTexture.src = "http://www.html5canvastutorials.com/content/labs/html5-canvas-bouncing-bunnies/bunny.png";
          
          document.body.appendChild( stats.domElement );
          stats.domElement.style.position = "absolute";
          stats.domElement.style.top = "0px";
          
          requestAnimationFrame(update);
      
          counter = document.createElement("div");
          counter.className = "counter";
          document.body.appendChild( counter);
          
          count = startBunnyCount;
          counter.innerHTML = 10 + " BUNNIES";
          
          container = stage;
          // stage.addChild(container);
          
          $(stage.getContainer()).mousedown(function(){
              isAdding = true;
          });
          
          $(stage.getContainer()).mouseup(function(){
              isAdding = false;
          })
          
          document.addEventListener("touchstart", onTouchStart, true);
          document.addEventListener("touchend", onTouchEnd, true);
          resize();
      }
      
      function _handleTextureLoaded (event) {
          for (var i = 0; i < startBunnyCount; i++) 
          {
              var bunny = new Kinetic.Image({
                  image: wabbitTexture,
                  transformsEnabled: 'position',
                  hitGraphEnabled: false
              });
      
              bunny.speedX = Math.random() * 10;
              bunny.speedY = (Math.random() * 10) - 5;
              
              bunny.regX = bunny.width*0.5;
              bunny.regY = bunny.height;
              bunnys.push(bunny);
              
              layer.add(bunny);
          }
      }
      
      function onTouchStart(event)
      {
          isAdding = true;
      }
      
      function onTouchEnd(event)
      {
          isAdding = false;
      }
      
      function resize()
      {
      
          var windowWidth = $(window).width(),
              width = windowWidth;
      
          if(width  > 800) width  = 800;
          
          maxX = width;
          minX = 0;

      }
      
      function update()
      {
          stats.begin();
          
          if(isAdding)
          {
              // add 10 at a time :)
              
              for (var i = 0; i < amount; i++) 
              {
                  var bunny = new Kinetic.Image({
                  image: wabbitTexture,
                  transformsEnabled: 'position',
                  hitGraphEnabled: false
              });
                  bunny.speedX = Math.random() * 10;
                  bunny.speedY = (Math.random() * 10) - 5;
                  
                  bunny.regX = bunny.width/2;
                  bunny.regY = bunny.height;
                  //bunny.alpha = 0.3 + Math.random() * 0.7;
                  bunnys.push(bunny);
                  
                  //bunny.rotation = Math.random() - 0.5;
                  var random = Math.random() *  (container.children.length-2);
                  layer.add(bunny)//, random);
                  
                  count++;
              }    
              counter.innerHTML = count + " BUNNIES";
          }
          
          for (var i = 0; i < bunnys.length; i++) 
          {
              var bunny = bunnys[i];
              
              bunny.setX(bunny.getX() + bunny.speedX);
              bunny.setY(bunny.getY() + bunny.speedY);
              bunny.speedY += gravity;
              
              if (bunny.getX() > maxX)
              {
                  bunny.speedX *= -1;
                  bunny.setX(maxX);
              }
              else if (bunny.getX() < minX)
              {
                  bunny.speedX *= -1;
                  bunny.setX(minX);
              }
              
              if (bunny.getY() > maxY)
              {
                  bunny.speedY *= -0.85;
                  bunny.setY(maxY);
                  if (Math.random() > 0.5)
                  {
                      bunny.speedY -= Math.random() * 6;
                  }
              } 
              else if (bunny.getY() < minY)
              {
                  bunny.speedY = 0;
                  bunny.setY(minY);
              }
              
          }
      
          layer.drawScene();
          requestAnimFrame(update);
          stats.end();
      }
    </script>
  </body>
</html>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值