zoukankan      html  css  js  c++  java
  • [Canvas]碰撞球

    观赏动态效果请点此下载并用Chrome/Firefox打开index.html

    图例:

    代码:

    <!DOCTYPE html>
    <html lang="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <head>
         <title>碰撞球 19.3.3 18:11 by:逆火 horn19782016@163.com</title>
         
         <style>
         #canvas{
            background:#ffffff;
            cursor:pointer;
            margin-left:10px;
            margin-top:10px;
            -webkit-box-shadow:3px 3px 6px rgba(0,0,0,0.5);
            -moz-box-shadow:3px 3px 6px rgba(0,0,0,0.5);
            box-shadow:3px 3px 6px rgba(0,0,0,0.5);
         }
         
         #controls{
            margin-top:10px;
            margin-left:15px;
         }
         </style>
         
        </head>
    
         <body onload="init()">
            <div id="controls">
                <input id='animateBtn' type='button' value='运动'/>
            </div>
         
            <canvas id="canvas" width="750px" height="500px" >
                出现文字表示你的浏览器不支持HTML5
            </canvas>
         </body>
    </html>
    <script type="text/javascript">
    <!--
    var paused=true;
    animateBtn.onclick=function(e){
        paused=! paused;
        
        if(paused){
            animateBtn.value="运动";
        }else{
        
            animateBtn.value="暂停";
            window.requestAnimationFrame(animate); 
        }
    }
    
    var ctx;// 绘图环境
    var balls;// 球数组
    function init(){
    
    
        var canvas=document.getElementById('canvas');
        canvas.width=750;
        canvas.height=500;
        ctx=canvas.getContext('2d');
    
        balls=[
            {    
                x:150,
                y:250,
                lastX:150,
                lastY:250,
                vx:-7.2,
                vy:3.8,
                radius:25,
                innerColor:'rgba(255,25,0,1)',
                middleColor:'rgba(255,25,0,0.7)',
                outerColor:'rgba(255,25,0,0.5)',
                strokeStyle:'gray',
            },
            
            {    
                x:650,
                y:50,
                lastX:150,
                lastY:250,
                vx:-8.2,
                vy:2.5,
                radius:25,
                innerColor:'rgba(113,232,227,1)',
                middleColor:'rgba(113,232,227,0.7)',
                outerColor:'rgba(113,232,227,0.5)',
                strokeStyle:'red',
            },
            
            {    
                x:50,
                y:150,
                lastX:150,
                lastY:250,
                vx:12,
                vy:-14,
                radius:25,
                innerColor:'rgba(23,45,227,1)',
                middleColor:'rgba(23,45,227,0.7)',
                outerColor:'rgba(23,45,227,0.5)',
                strokeStyle:'blue',
            },
       ];
    
    };
    
    function update(){
        for(var i=0;i<balls.length;i++){
            var ball=balls[i];
            
            if(ball.x+ball.vx+ball.radius>ctx.canvas.width || ball.x+ball.vx-ball.radius<0){
                ball.vx=-ball.vx;
            }
            
            if(ball.y+ball.vy+ball.radius>ctx.canvas.height || ball.y+ball.vy-ball.radius<0){
                ball.vy=-ball.vy;
            }
            
            ball.x+=ball.vx;
            ball.y+=ball.vy;
            
    
        }
    }
    
    function draw(){
        ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);
        
        for(var i=0;i<balls.length;i++){
            var ball=balls[i];
            
            gradient=ctx.createRadialGradient(ball.x,ball.y,0,ball.x,ball.y,ball.radius);
            gradient.addColorStop(0.3,ball.innerColor);
            gradient.addColorStop(0.5,ball.middleColor);
            gradient.addColorStop(1.0,ball.outerColor);
            
            ctx.save();
            ctx.beginPath();
            ctx.arc(ball.x,ball.y,ball.radius,0,Math.PI*2,false);
            ctx.fillStyle=gradient;
            ctx.strokeStyle=ball.strokeStyle;
            ctx.fill();
            ctx.stroke();
            ctx.restore();
        }
    }
    
    function animate(){
        if(!paused){
    
            update();
            draw();
        
            setTimeout( function(){
                window.requestAnimationFrame(animate); /// 让浏览器自行决定帧速率
            }, 0.10 * 1000 );// 延时执行
        }
    }
    //-->
    </script>

    2019年3月3日19点52分

  • 相关阅读:
    重载与复写的区别
    Linux常用的网络命令
    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载
    Java中重载与复写的区别、super与this的比较
    JAVA中extends 与implements区别
    Android控件系列之Button以及Android监听器
    Could not find SDK_Root\tools\adb.exe 的解决方法
    路由知识普及和经验分享
    abort函数
    细说Cookie
  • 原文地址:https://www.cnblogs.com/heyang78/p/10467191.html
Copyright © 2011-2022 走看看