zoukankan      html  css  js  c++  java
  • 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         }
  • 相关阅读:
    第二周:对Java面向对象的特点的基本感受
    第一周学习情况
    插入排序
    快速排序
    vue传值(小demo)
    Vue下简单分页及搜索功能
    js超简单冒泡算法
    vue框架中实现今天昨天前天最近时间
    vue简单的v-for
    ssm web.xml配置解析
  • 原文地址:https://www.cnblogs.com/younth/p/5189704.html
Copyright © 2011-2022 走看看