canvas刮刮卡游戏开发

canvas刮刮卡游戏开发

先看效果:

在这里插入图片描述

一.基础知识-画布元素的使用

1 绘制线条

  • 思路

    1. 在页面中添加画布元素
    2. 获取画布元素的上下文环境对象
    3. 使用上下文环境对象绘制图形,保存在内存中
    4. 绘制一个线条
    //设置画布的起始点
    context.moveTo(x,y);
    //从当前位置绘制直线到x,y座标
    context.lineTo(x,y);
    

    案例和效果:

在这里插入图片描述

2. 绘制不同线条颜色的三角形

  • 绘制三角形

    绘制一个简单的三角形

  • 绘制的颜色与线条宽度

    //设置笔触图形的颜色
    context.strokeStyle=color
    -------------------------
    //设置线条的宽度,以像素为单位
    context.lineWidth=number
    
  • 重置路径

  • //开始一条路径,或重置当前的路径,并切断和上一个图形的路径联系
    context.beginPath()
    
  • 重置路径的优势

    可以实现不同大小和颜色图形的单独绘制。

  • 案例和效果:

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <canvas id="cvs" style="border: solid 1px #ccc"></canvas>

    <script type="text/javascript">
        //获取画布元素
        var cvs=document.getElementById("cvs");
        //获取工具集
        var cxt=cvs.getContext("2d");
        //设置绘制图形的线条宽度
        cxt.lineWidth=5;

         
        //设置绘制图形的颜色
        cxt.strokeStyle='red';
        //定位一个起始点
        cxt.moveTo(50,50);
        //绘制第二个点
        cxt.lineTo(150,50)
        //绘制线条
        cxt.stroke()
        //重置当前路径
        cxt.beginPath();

        //设置绘制图形的颜色
        cxt.strokeStyle='blue';
        //设置绘制第二条线起始点
        cxt.moveTo(150,50);
        //绘制第二个点
        cxt.lineTo(80,100)
        //绘制线条
        cxt.stroke()
        //重置当前路径
        cxt.beginPath();

        //设置绘制图形的颜色
        cxt.strokeStyle='green';
        //设置绘制第二条线起始点
        cxt.moveTo(80,100);
        //返回原始点
        cxt.lineTo(50,50)
        //绘制线条
        cxt.stroke()

    </script>
</body>
</html>

效果:

在这里插入图片描述

二.基础知识-其他绘制API

1. 文字绘制API

  • 指定位置

    //在指定位置和宽度内绘制文字
    context.fillText(text,x,y,maxWidth); //最大宽度
    
  • 设置字体名称和样式

    //设置字体名称和形状
    context.font='字体属性' //bold 32px sans-serif
    
  • 设置字体对齐位置

    //设置文本内容水平对齐方式
    context.textAlign='水平方位值' //center|left|right
    //设置文本内容垂直对齐方式
    context.textBaseline='垂直方位值' //top|middle|bottom
    
  • 绘制内容另存为图片

    //当前绘制内容存为图片
    context.toDataURL(type, encoderOptions);//image/png图片格式,0到1区间图片质量
    
  • 案例和效果:

  • 普通文字

在这里插入图片描述

带有对齐方式和另存为图片

在这里插入图片描述

2. 绘制矩形和圆形及图片

  • 绘制矩形

    //绘制矩形的路径
    context.rect(x,y,width,height);
    //绘制无填充的矩形
    context.strokeRect(x,y,width,height);
    //绘制填充的矩形
    context.fillRect(x,y,width,height);
    //清空指定矩形内像素
    context.clearRect(x,y,width,height);
    

    案例和效果:

在这里插入图片描述

  • 绘制有弧度的圆形

    //在指定位置绘制一个圆形
    context.arc(x,y,r,sAngle,eAngle,clockwise);
    
  • 绘制不同大小的图片

    //在画布上绘制固定座标的图像
    context.drawImage(img,x,y);
    //在画布上绘制不仅固定座标,且规定图像的宽度和高度图像
    context.drawImage(img,x,y,width,height);
    //在画布上剪切图像,并在画布上绘制被剪切的部分
    context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);
    
    

    案例和效果:

在这里插入图片描述

三.开始刮刮卡游戏开发: 实现刮刮卡效果

思路步骤:

​ 1.将随机的中奖信息绘制到画布中;

​ 2.使用灰色的矩形覆盖中奖信息;

​ 3.使用鼠标滑擦区域实现刮刮效果;

完整代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <canvas style="border:solid 1px #ccc" id="cas"></canvas>
</body>

</html>
<script type="text/javascript">
    /* 思路步骤:
    1.将随机的中奖信息绘制到画布中;
    2.使用灰色的矩形覆盖中奖信息;
    3.使用鼠标滑擦区域实现刮刮效果;
     */
    var cas = document.getElementById("cas"); //获取画布元素
    var cxt = cas.getContext('2d') //获取画布工具集
    console.log(cxt);


    //步骤1开始
    var arr = ["特等奖", "一等奖", "二等奖", "三等奖", "谢谢参与"]
    // 随机生成文字
    var randomText = arr[Math.floor(Math.random() * arr.length)];
    // console.log(randomText);
    cxt.font = "bold 30px 黑体";
    cxt.textAlign = "center";
    cxt.textBaseline = 'middle';
    cxt.fillStyle = "red"
    cxt.fillText(randomText, cas.width / 2, cas.height / 2);
    // 将绘制的文字画布生成图片,做为画布的背景图
    var bgm = cas.toDataURL('image/png', 1); //记得用cas
    cas.style.background = "url(" + bgm + ")";
    //步骤1完成

    //步骤2开始
    cxt.fillStyle = "#ddd";
    cxt.fillRect(0, 0, cas.width, cas.height);
    //步骤2完成

    //步骤3开始
    var flag = false
    cas.addEventListener("mousedown", () => {
        flag = true;
        cxt.globalCompositeOperation="destination-out";//很重要,设置这个属性,实现绘画的区域与背景透明
    })
    cas.addEventListener("mousemove", (e) => {
        if (flag) {
            var x = e.clientX;
            var y = e.clientY;
            cxt.fillStyle = "red";
            cxt.fillRect(x, y, 30, 30)
        }
    })
    cas.addEventListener("mouseup", () => {
        console.log("onmouseup");
        flag = false;

    })
    //步骤3完成
</script>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章