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         }

 

你可能感兴趣的:(canvas 模拟小球上抛运动的物理效果)