• 使用canvas绘制渐变色矩形和使用按键控制人物移动


    使用canvas绘制渐变色矩形和使用按键控制人物移动

    1.使用canvas绘制渐变色矩形

    效果演示

    image.png

    相关代码:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            canvas {
                border: 1px solid #ccc;
            }
    /*        .linearGradient{
                 400px;
                height: 100px;
                background-image: linear-gradient(to right,pink,blue);
            }*/
        </style>
    </head>
    <body>
    <div class="linearGradient"></div>
    <canvas width="600" height="400"></canvas>
    <script>
        var myCanvas = document.querySelector('canvas');
        var ctx = myCanvas.getContext('2d');
    
        /*fillStyle 'pink' '#000' 'rgb()' 'rgba()' */
        /*也可以使用一个渐变的方案了填充矩形*/
        /*创建一个渐变的方案*/
        /*渐变是由长度的*/
        /*x0y0 起始点 x1y1 结束点  确定长度和方向*/
        var linearGradient = ctx.createLinearGradient(100,100,500,400);
        linearGradient.addColorStop(0,'pink');
        //linearGradient.addColorStop(0.5,'red');
        linearGradient.addColorStop(1,'blue');
    
        ctx.fillStyle = linearGradient;
    
        ctx.fillRect(100,100,400,100);
    
        /*pink---->blue*/
        /*回想线性渐变---->要素 方向  起始颜色 结束颜色 */
        /*通过两个点的坐标可以控制 渐变方向*/
    </script>
    </body>
    </html>
    

    2.使用按键控制人物移动

    效果演示:

    GIF.gif

    相关代码:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            canvas {
                border: 1px solid #ccc;
            }
        </style>
    </head>
    <body>
    <canvas width="600" height="400"></canvas>
    <script>
    
        var Person = function (ctx) {
            /*绘制工具*/
            this.ctx = ctx || document.querySelector('canvas').getContext('2d');
            /*图片路径*/
            this.src = 'image/04.png';
            /*画布的大小*/
            this.canvasWidth = this.ctx.canvas.width;
            this.canvasHeight = this.ctx.canvas.height;
    
            /*行走相关参数*/
            this.stepSzie = 10;
            /* 0 前  1 左  2 右  3 后  和图片的行数包含的图片对应上*/
            this.direction = 0;
            /*x轴方向的偏移步数*/
            this.stepX = 0;
            /*y轴方向的偏移步数*/
            this.stepY = 0;
    
            /*初始化方法*/
            this.init();
        };
    
        Person.prototype.init = function () {
            var that = this;
            /*1.加载图片*/
            this.loadImage(function (image) {
                /*图片的大小*/
                that.imageWidth = image.width;
                that.imageHeight = image.height;
                /*人物的大小*/
                that.personWidth = that.imageWidth / 4;
                that.personHeight = that.imageHeight / 4;
                /*绘制图片的起点*/
                that.x0 = that.canvasWidth / 2 - that.personWidth / 2;
                that.y0 = that.canvasHeight / 2 - that.personHeight / 2;
                /*2.默认绘制在中心位置正面朝外*/
                that.ctx.drawImage(image,
                    0,0,
                    that.personWidth,that.personHeight,
                    that.x0,that.y0,
                    that.personWidth,that.personHeight);
    
                /*3.能通过方向键去控制人物行走*/
                that.index = 0;
                document.onkeydown = function (e) {
                    if(e.keyCode == 40){
                        that.direction = 0;
                        that.stepY ++;
                        that.drawImage(image);
                        /*前*/
                    }else if(e.keyCode == 37){
                        that.direction = 1;
                        that.stepX --;
                        that.drawImage(image);
                        /*左*/
                    }else if(e.keyCode == 39){
                        that.direction = 2;
                        that.stepX ++;
                        that.drawImage(image);
                        /*右*/
                    }else if(e.keyCode == 38){
                        that.direction = 3;
                        that.stepY --;
                        that.drawImage(image);
                        /*后*/
                    }
                }
            });
        }
        /*加载图片*/
        Person.prototype.loadImage = function (callback) {
            var image = new Image();
            image.onload = function () {
                callback && callback(image);
            };
            image.src = this.src;
        };
        /*绘制图片*/
        Person.prototype.drawImage = function (image) {
            this.index ++;
            /*清除画布*/
            this.ctx.clearRect(0,0,this.canvasWidth,this.canvasHeight);
            /*绘图*/
            /*在精灵图上的定位 x  索引*/
            /*在精灵图上的定位 y  方向*/
            this.ctx.drawImage(image,
                this.index * this.personWidth,this.direction * this.personHeight,
                this.personWidth,this.personHeight,
                this.x0 + this.stepX * this.stepSzie ,this.y0 + this.stepY * this.stepSzie,
                this.personWidth,this.personHeight);
            /*如果索引超出了 变成0*/
            if(this.index >= 3){
                this.index = 0;
            }
        };
    
    
        new Person();
    
    </script>
    </body>
    </html>
    
  • 相关阅读:
    [转载]DBA的特质第一部分:技术
    DPA/Ignite由于DNS问题导致连接不上被监控的数据库服务器
    ORACLE计算表引占用空间大小
    Reporting Services 错误案例一则
    SQL SERVER Transactional Replication中添加新表如何不初始化整个快照
    TNS-12540: TNS:internal limit restriction exceeded
    Error: 9001, Severity: 21, State: 5 The log for database 'xxxx' is not available
    ORA-01012: not logged on
    -bash: .bash_profile: command not found
    -bash: ulimit: pipe size: cannot modify limit: Invalid argument
  • 原文地址:https://www.cnblogs.com/charlypage/p/9737161.html
Copyright © 2020-2023  润新知