我是靠谱客的博主 爱听歌飞机,最近开发中收集的这篇文章主要介绍【canvas】精灵类(游戏前置)【canvas】精灵类(游戏前置),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【canvas】精灵类(游戏前置)

在这里插入图片描述

游戏内容

1.背景类型(不可动,或整体移动)
2.独立个体类型(独立的动作)
3.可控的动作个体

使用相关方法

1.es6定义类 解决封装问题
2.canvas相关方法(translate,rotate,drawImage)

精灵的需求

1.精灵可复用且互不相关(除了图片的引用,这是必须的)
2.可控(前后左右移动,旋转)

解析

1.canvas中渲染图片,是无法将图片进行旋转,只能将画布进行旋转操作,因此要在canvas渲染出旋转的图片其实是先把画布进行旋转,再加入图片然后在复原画布旋转角度。
2.对图片进行旋转和移动时,这里设定图片中心为原点进行操作。
3.当移动和旋转同时操作时,则要考虑洋葱方案,因为对图片的渲染无论是旋转还是移动,其实都是对画布的操作,因此在正确渲染出图像后,要对画布逆向操作来恢复画布的位置,防止其他图片渲染位置出错
4.精灵的移动有两个坐标轴,世界(画布)坐标轴和精灵本身坐标轴,对精灵的x,y值直接操作是相对于世界坐标轴,精灵本身坐标轴则需要通过旋转角度和每一步的长度进行计算得出

export default class Spirit {
    constructor(p) {
        p = p || {};
        this.x = p['x']||0; // 坐标x
        this.y = p['y']||0; // 坐标y
        this.rotate = p['rotate']||0; // 旋转
        this.width = p['width']||100; // 宽度
        this.height = p['height']||100; // 高度
        this.img = p['img']; // <img>
        
    }

    render(ctx){// ctx是canvas2d画布对象
        ctx.translate(this.x + this.width / 2, this.y + this.height / 2)
        ctx.rotate(this.rotate *  Math.PI / 180 );
        ctx.drawImage(this.img, - this.width / 2, - this.height / 2, this.width, this.height);
        ctx.rotate(- this.rotate *  Math.PI / 180);
        ctx.translate(- this.x - this.width / 2, - this.y - this.height / 2);
    }


    
    move(direct,step){//相对精灵的移动
      /* 
      	direct:String = ‘x’ 左右移动  ,‘y 上下移动
        step:Number  每一步长度
      */
        let rotate = this.rotate *  Math.PI / 180

        if(direct=='y'){
            this.x += step * Math.sin( rotate )
            this.y -= step * Math.cos( rotate )
        }
        if(direct=='x'){
            this.x += step * Math.cos( rotate )
            this.y += step *  Math.sin( rotate )
        }
    }
}

注意点

1.使用render进行渲染
2.世界坐标轴移动操作对象操作x,y值,精灵坐标轴移动使用move方法

最后

以上就是爱听歌飞机为你收集整理的【canvas】精灵类(游戏前置)【canvas】精灵类(游戏前置)的全部内容,希望文章能够帮你解决【canvas】精灵类(游戏前置)【canvas】精灵类(游戏前置)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部