- 39
- 0
在vue框架下,canvas双缓冲是怎样实现,我现在已经在canvas添加了双缓冲,为何页面还是会出现闪屏效果??是我添加错了吗??搜了好多例子都说做双缓存就可以,但是好像我这边拖拽图片还是一直闪,我这个双缓冲是做错了吗??// 绘制 drawCanvasFun () { this.canvasSize.drawCanvasWidth = this.$refs.flDiv.offsetWidth this.canvasSize.drawCanvasHeight = this.$refs.flDiv.offsetHeight var drawCanvas = document.getElementById('drawCanvas') var drawContext = drawCanvas.getContext('2d') drawCanvas.width = this.canvasSize.drawCanvasWidth drawCanvas.height = this.canvasSize.drawCanvasHeight var cacheCanvas = document.getElementById('cacheCanvas') var cacheCanvasCxt = cacheCanvas.getContext('2d') cacheCanvas.width = this.canvasSize.drawCanvasWidth cacheCanvas.height = this.canvasSize.drawCanvasHeight // 绘制直线 // 绘制图片 if (this.canvasData.length > 0) { this.canvasData.forEach((item, index) => { // this.drawImg(drawContext, item.source, item.x, item.y, item.width, item.height, item.key) this.drawImg(cacheCanvasCxt, item.source, item.x, item.y, item.width, item.height, item.key) }) } if (this.canvasLineData.length > 0) { // console.log('this.canvasLineData', this.canvasLineData) this.canvasLineData.forEach((item, index) => { this.drawLine(item.point[0].x, item.point[0].y, item.point[1].x, item.point[1].y, item.point[0].point, item.point[1].point, index, item.color, 'cacheCanvasCxt') drawContext.drawImage(cacheCanvas, 0, 0, drawCanvas.width, drawCanvas.height) }) }},// 绘制图片drawImg (drawContext, source, x, y, width, height, key) { var drawCanvas = document.getElementById('drawCanvas') var dxt = drawCanvas.getContext('2d') var cacheCanvas = document.getElementById('cacheCanvas') var cacheCanvasCxt = cacheCanvas.getContext('2d') drawContext.save() drawContext.beginPath(); // 绘制四个点 // drawContext.moveTo(x + width / 2 - 2, y) // drawContext.lineTo(x + w / 2 + 2, y) // drawContext.lineTo(x + w / 2 + 2, y + 4) // 四个点宽 let rectWidth = 6 // var img = new BufferedImag() var img = new Image() img.src = source img.onload = () => { // drawContext.drawImage(img, this.moveToolImg.x, this.moveToolImg.y, this.moveToolImg.width, this.moveToolImg.height) drawContext.drawImage(img, x, y, width, height) drawContext.beginPath() drawContext.fillStyle = 'rgba(255,0,0,0.3)' drawContext.fillRect(x + width / 2 - rectWidth / 2, y, rectWidth, rectWidth) //上 drawContext.fillRect(x + width - rectWidth, y + height / 2 - rectWidth / 2, rectWidth, rectWidth)//右 drawContext.fillRect(x + width / 2 - rectWidth / 2, y + height - rectWidth, rectWidth, rectWidth)//下 drawContext.fillRect(x, y + height / 2 - rectWidth / 2, rectWidth, rectWidth)//左 drawContext.closePath() this.canvasData.forEach((item, index) => { // var img = new Image() if (key == item.key) { // fourPoint item['fourPoint'] = [ {//上 x: x + width / 2 - rectWidth / 2, y: y, point: 'T' }, {//右 x: x + width - rectWidth, y: y + height / 2 - rectWidth / 2, point: 'R' }, {//下 x: x + width / 2 - rectWidth / 2, y: y + height - rectWidth, point: 'B' }, {//左 x: x, y: y + height / 2 - rectWidth / 2, point: 'L' }, ] } }) // console.log('this.canvasData', this.canvasData) dxt.clearRect(0, 0, drawCanvas.width, drawCanvas.height); dxt.save() dxt.drawImage(cacheCanvas, 0, 0, drawCanvas.width, drawCanvas.height) dxt.restore() return true } drawContext.restore() // dxt.save() // dxt.drawImage(cacheCanvas, 0, 0, drawCanvas.width, drawCanvas.height) // dxt.restore() cacheCanvasCxt.clearRect(0, 0, cacheCanvas.width, cacheCanvas.height);},
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

