Html5最简单的游戏Demo——Canvas绘图的弹弹球

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>弹弹球</title>
    <script type="text/ecmascript">
        var drawWorker;//重绘的事件
        var result = 0;//整形,游戏坚持的时间,秒
        var record = 0;//整形,游戏的记录
        var timeWorker;//计时的事件,每秒一次

        var pointRadius = 10;//球的半径
        var pointX = 20;//球的圆心x坐标
        var pointY = 20;//球的圆心y坐标

        var speedX = 10;//球向右移动的速度
        var speedY = 5;//球向下移动的速度

        var panelX = 0;//小方块的最左边的x坐标
        var panelY = 280;//小方块的最上端的y坐标
        var panelHeight = 20;
        var panelWidth = 100;

        var wholeWidth = 500;
        var wholeHeight = 300;

        var canvas;
        var ctx;

        function Init() {
            canvas=document.getElementById("myCanvas");
            ctx = canvas.getContext("2d");

            ctx.strokeRect(0, 0, wholeWidth, wholeHeight);
        }

        function DrawBall() {
            var ctx = document.getElementById("myCanvas").getContext("2d");

            ctx.clearRect(1, 1, wholeWidth-2, wholeHeight-2);            //清理矩形范围

            pointX = pointX + speedX;//新的圆心x坐标
            pointY = pointY + speedY;//新的圆心y坐标

            ctx.beginPath();                                //弹弹球
            ctx.arc(pointX, pointY, pointRadius, 0, Math.PI * 2);
            ctx.closePath();
            ctx.fill();

            ctx.fillRect(panelX, panelY, panelWidth, panelHeight);          //小方块
        }

        function MoveBall() {
            if (pointY >= wholeHeight - panelHeight) {
                if (pointX < panelX || pointX > panelX + panelWidth) {

                    EndGame();                                //越过小方块,游戏结束
                    return;
                }
                else {
                    speedX = speedX > 0 ? speedX + 5 : speedX - 5;            //碰到小方块,小球加速
                    speedY = speedY > 0 ? speedY + 5 : speedY - 5;
                }
            }

            if (pointX >= wholeWidth || pointX<=0) {                    //接触到边界,对应的方向转向
                speedX = speedX - 2 * speedX;
            }

            if (pointY >= wholeHeight - panelHeight || pointY <= 0) {
                speedY = speedY - 2 * speedY;
            }

                DrawBall();

        }

        function MovePanel(event) {
            panelX = event.pageX - (panelWidth / 2);
        }

        function AddResult() {
            result = result + 1;
            var resultLabel = document.getElementById("currentLabel");
            resultLabel.textContent = result;
        }

        function Play() {
            pointX =Math.floor( Math.random() * 20) + 10;//球的圆心x坐标
            pointY = Math.floor(Math.random() * 20) + 10;//球的圆心y坐标

            speedX = 20;//球向右移动的速度
            speedY = 10;//球向下移动的速度

            result = 0;              

            drawWorker = setInterval(MoveBall, 100);                    //每100毫秒就重绘小球跟小方块位置
            timeWorker = setInterval(AddResult, 1000);                    //每秒更新结果

            canvas.addEventListener("mousemove", MovePanel, false);             //开始玩,需要将所有相关参数都再初始化
 
        }

        function EndGame() {                                   //游戏结束
            clearInterval(timeWorker);                             //停止两个定时任务
            clearInterval(drawWorker);

            canvas.removeEventListener("mousemove", MovePanel, false);          //移除鼠标移动事件的处理

            if (result > record) {
                record = result;
                var recordLabel = document.getElementById("recordLabel");
                recordLabel.textContent = result;
            }
            result = 0;
        }
    </script>
</head>
<body onload="Init();">
    <canvas id="myCanvas" width="500" height="300">your broswer does not support canvas.</canvas>
    <br />
    <input type="button" value="play" onclick="Play();" />
    <br />
    <label>本次结果:</label>
    <label id="currentLabel">0</label>
    <br />
    <label>最高纪录:</label>
    <label id="recordLabel">0</label>
</body>
</html>

 上文代码实现了一个很基本的弹弹球游戏。

按下Play按钮,在Canvas范围内左右移动鼠标,滑块会随之移动。如果成功接住落下的小球则小球加速并且变向。当小球落在底框的时候游戏结束。游戏将会记录坚持的时间。

转载于:https://www.cnblogs.com/AlvinLiang/p/4191776.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CanvasHTML5新增的一个用于绘制图形的标签,可以通过JavaScript来控制Canvas进行图形的绘制。在进行Canvas绘制时,可以通过调整画布的位置、大小和旋转角度等属性,来控制绘制出来的图形的位置和形态。 下面我们就来介绍一下Canvas画布的移动、缩放和旋转: 1. 画布移动 画布移动可以通过Canvas提供的translate方法来实现。translate方法接收两个参数,分别表示x轴和y轴方向上的偏移量。偏移量为正值表示向右或向下移动,为负值表示向左或向上移动。 例如,我们可以通过下面的代码将画布向右移动50个像素,向下移动100个像素: ``` context.translate(50, 100); ``` 2. 画布缩放 画布缩放可以通过Canvas提供的scale方法来实现。scale方法接收两个参数,分别表示x轴和y轴方向上的缩放比例。缩放比例为大于1的值表示放大,小于1的值表示缩小。 例如,我们可以通过下面的代码将画布在x轴和y轴方向上都放大2倍: ``` context.scale(2, 2); ``` 3. 画布旋转 画布旋转可以通过Canvas提供的rotate方法来实现。rotate方法接收一个参数,表示旋转的角度,单位为弧度。 例如,我们可以通过下面的代码将画布旋转45度: ``` context.rotate(Math.PI / 4); ``` 需要注意的是,Canvas绘图的坐标系原点默认在画布的左上角,而移动、缩放和旋转操作都是相对于原点进行的。因此,在进行这些操作时,需要先将画布的原点移动到需要的位置,再进行操作。例如,如果需要将画布向右移动50个像素,需要先将原点移动到(50,0)的位置,再进行移动操作: ``` context.translate(50, 0); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值