• canvas 模拟小球上抛运动的物理效果


    最近一直想用学的canvas做一个漂亮的小应用,但是,发现事情并不是想的那么简单。比如,游戏的逼真效果,需要自己来coding……

    所以,自己又先做了一个小demo,算是体验一下亲手打造物理引擎的感觉吧。*_*

    代码效果预览地址:http://code.w3ctech.com/detail/2524

    html:

    1 <div class="container">
    2     <canvas id="canvas" style="border:1px solid #ccc; opacity:0.7"></canvas>
    3 </div>

    css:

    * {
                padding: 0;
                margin: 0;
            }
    
            body {
                background-color: #fff;
            }

    js:

     1 window.onload = function () {
     2             var CANVAS_HEIGHT=600;
     3             var CANVAS_WIDTH = 1300;
     4             var u = 0.6;//能耗系数
     5             var g = 4;//重力加速度
     6             var timer;
     7             var ball = { x: 100, y: 500, Vx: 5, Vy: 100, r: 5, color: "#4cff00" };
     8 
     9             var canvas = document.getElementById("canvas");
    10             canvas.height = CANVAS_HEIGHT;
    11             canvas.width = CANVAS_WIDTH;
    14 
    15             var ctx = canvas.getContext("2d");
    16 
    17             function draw() {
    18                 ctx.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);//清除小球在canvas上前一帧的状态
    19                 ctx.beginPath();
    20                 ctx.arc(ball.x, ball.y, ball.r, 0, 2 * Math.PI);
    21                 ctx.fillStyle = ball.color;
    22                 ctx.fill();
    23             }
    24             function update() {
    25                 ball.x += ball.Vx;
    26                 if (ball.Vy==0&&ball.y >= CANVAS_HEIGHT - ball.r) {
    27                     ball.Vy = 0;
    28                 }
    29                 else {
    30                     ball.Vy += g;
    31                 }
    32                 ball.y += ball.Vy;
    33                 console.log(ball.Vy);
    34                 if (ball.y>CANVAS_HEIGHT - ball.r) {
    35                     ball.y = CANVAS_HEIGHT - ball.r;
    36                     ball.Vy = -Math.ceil(ball.Vy*u);
    37                 }
    38                 if (ball.x == 0 + ball.r || ball.x == CANVAS_WIDTH) {
    39                     clearInterval(timer);
    40                 }
    41             }
    42             timer=setInterval(function () {
    43                 draw();
    44                 update();
    45             }, 40);
    46         }
  • 相关阅读:
    How to load yaml file in python
    sqlserver 执行计划
    数据库迁移
    运维python算法面试
    Python中的 if __name__ == '__main__' 是什么意思?
    Linux CPU,TCP性能瓶颈排查
    SHELL转义字符$
    Excel插入PivotTable透视图表设计统计
    查看server握手链接是否有积压
    Linux查看历史IO信息
  • 原文地址:https://www.cnblogs.com/younth/p/5189704.html
Copyright © 2020-2023  润新知