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         }
时间: 2024-11-05 20:39:21

canvas 模拟小球上抛运动的物理效果的相关文章

Javascript摸拟自由落体与上抛运动 说明!

JavaScript 代码 //**************************************** //名称:Javascript摸拟自由落体与上抛运动! //作者:Gloot //邮箱:[email protected] // QQ:345268267 //网站:http://www.cnblogs.com/editor/ //操作:在页面不同地方点几下 //*************************************** var $ = function(el)

matplotlib绘图-斜上抛运动

matplotlib是Python中绘制2D图形使用最多的库,可以很轻松的将数据图形化.本文绘制了斜上抛运动,下面是最终的效果. (菲菲老师教得好,幸不辱命 (? ̄?? ̄??)??° ) 导入所需数据包这里的animation.FuncAnimation(fig,update,generate,interval = 5)函数,是用于生成动态图片的.其中fig表示生成的图表对象:generate函数生成数据后传递给update函数更新,这样数据不断更新,图形也不停变化:interval表示时间间隔

HTML5 Canvas彩色小球碰撞运动特效

脚本简介 HTML5 Canvas彩色小球碰撞运动特效是一款基于canvas加面向对象制作的运动小球动画特效. 效果展示 http://hovertree.com/texiao/html5/39/ 效果图如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML5 Canvas彩色小球碰撞运动特效

第八讲:HTML5中canvas实现小球击打小方块游戏

源代码:http://download.csdn.net/detail/liumingm900913/7469969 游戏开发流程: 1.创建画布: 将画布放在div标签里面,这样可以控制画布居中的位置,在对div标签加上一些样式,利于观看 <div id="main"> <!--将画布嵌在div块里面,使其可以居中--> <canvas id="liuming_canvas" width="300px" heigh

canvas模拟中国铁路运行图

原理说明 1.在知道canvas画布尺寸的情况下,需要将地理经纬度信息转换为canvas画布x,y坐标,因为中国地图地理经纬度坐标取值范围为73.33-135.05(经度)37-50(维度),所以第一步需要确认的就是画布的中心位置,这里命名为centerX和centerY,同样的确认中国地图经纬度对应的中心位置,这里命名为positionX,positionY. 2.人为定义一个放大值range,这个值主要作用就是等比例的将中国地图在canvas画布中放大,range的数值需要根据画布横向尺寸跨

用canvas模拟钟表

很久没有更新博客了,最近忙实习准备面试,快要心力交瘁-_-.空闲下来后,用HTML5的canvas模拟的简易钟表,贴上代码. 效果如下: <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>canvas模拟钟表</title> <style> bod

HTML5 模拟现实物理效果

Ball Pool 是一个基于 HTML5 技术的实验,模拟现实物理效果,让你在 Web 中感受自然物体的运动.玩法介绍:可以随意拖动圆球.点击页面背景.晃动浏览器.双击页面背景或者按住鼠标左键,有不同的效果,赶紧来体验一下. 源码下载     在线演示

模拟现实物理效果

<p><!doctype html>HTML5 模拟现实物理效果,感受 Web 技术魅力</p> <style><!-- body { overflow: hidden; background-color: #000000; user-select: none; -webkit-user-select: none; -moz-user-select: none; -o-user-select: none; -ms-user-select: none;

vb.net模拟文件上传

Imports Microsoft.VisualBasic Imports System.Net Imports System.Security.Cryptography.X509Certificates Imports System.Security.Authentication Imports System.Net.Security Imports System.Collections.Generic Imports System.Text Imports System.IO Public