老莫的笔记本  
  
查看: 1173|回复: 0

Canvas 下落算法

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-12-23 23:47:17 | 显示全部楼层 |阅读模式
注意下落算法, y = 常数*T
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <title>像素鸟测试</title>
  7. <meta name="description" content="">
  8. <meta name="keywords" content="">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
  10. <link href="style/reset.css" rel="stylesheet">
  11. <link href="style/common.css" rel="stylesheet">
  12. <style>
  13.     #canvas{
  14.         border:1px solid #000;
  15.     }
  16.     div{
  17.         margin:10px auto;
  18.         width:602px;
  19.     }
  20.     h4{
  21.         text-align: center;
  22.     }
  23. </style>
  24. </head>
  25. <body>
  26.     <h4>下落算法推演</h4>
  27.     <div>
  28.         <canvas id="canvas" width="600" height="600"></canvas>
  29.     </div>
  30.     <button id="btn">掉啊</button>
  31.     <button id="startbtn">飞飞飞</button>
  32.     <script>
  33.     var myCanvas = document.querySelector("#canvas");
  34.     var ctx = myCanvas.getContext("2d");
  35.     var img = new Image();
  36.         img.src = 'img/bird0_0.png
  37.         var pin = 0;    //帧编号
  38.         var downtime = 0; // 小鸟下落的小帧编号
  39.         var y = 100;  //小鸟开始下落的定位初始位置
  40.         var key = false; //控制小鸟是否下落的开关 true 表示开始下落
  41.         var energy = false; //点击上升按钮,让小鸟飞起来
  42.         var bor_C = 0; //鸟头角度
  43.         
  44.         img.onload = function (){
  45.              setInterval(function(){
  46.                 // 清屏
  47.                 ctx.clearRect(0, 0, 600, 600);
  48.                
  49.                 // 下面三句话代表打点计数,帧编号增加
  50.                 pin++;
  51.                 ctx.font="32px serif";
  52.                 ctx.fillText(pin,40,40);
  53.                 // 劳资要开始改变坐标系拉
  54.                 ctx.save();
  55.                 // 下落开关
  56.                 // if(key){
  57.                 //     // 物体下落的公式 是 常数*t 每次下落,距离都增加了 常数*t 所以 y+= 常数*t
  58.                 //     y += 1.6*downtime;
  59.                 //     // 下落时间增加
  60.                 //     downtime++;
  61.                 // }
  62.                 // // 再来一个小鸟向上飞,飞的宗旨是 越飞越慢,到达一个时间点就开始往下掉
  63.                 // // 用20- 这个20 其实就是每次向上飞起的帧数
  64.                 // y -= 1.2*(20-downtime);
  65.                 // downtime++;
  66.                 // 综合上升,下落, 本质是
  67.                 // 1.状态是一直在下落
  68.                 // 2.小鸟上飞的时候,鸟头会陡然向上20祯后,鸟头平缓
  69.                 if(energy){
  70.                     // 小鸟起飞
  71.                     y -= 0.4*(20-downtime);
  72.                     if(downtime>=20){
  73.                         energy = false;
  74.                         downtime = 0;
  75.                     }
  76.                 }else{
  77.                     // 小鸟下落
  78.                     y += 0.6*downtime;
  79.                 }
  80.                 downtime++;
  81.                 // 鸟头角度改变
  82.                 bor_C++;
  83.                 // 坐标圆心 偏移x 150 ,Y 120
  84.                 ctx.translate(200, 200+y);
  85.                
  86.                 // 坐标轴 整体旋转 (Math.PI*2/360)*2 2°
  87.                 ctx.rotate((Math.PI*2/120)*bor_C);
  88.                 // 注意了,这里的图片的坐标轴是负的
  89.                 ctx.drawImage(img,-24,-24,48,48);
  90.                 // 还原坐标系
  91.                 ctx.restore();
  92.                 // 放个框 证明屏幕正常
  93.                 ctx.fillRect(500,500,50,50);
  94.             }, 100)
  95.         }
  96.         var Btn = document.querySelector('#btn');
  97.         var startBtn = document.querySelector('#startbtn');
  98.         Btn.onclick= function (){
  99.             key = true
  100.         }
  101.         // 飞起按钮
  102.         startBtn.onclick= function (){
  103.             energy = true;
  104.             downtime = 0;  //下落的小祯编号 清零
  105.             bor_C = -20;    //鸟头朝上倾斜
  106.         }
  107.       
  108.     </script>
  109. </body>
  110. </html>
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表