随着数组变大,我在画布上的方形对象会急剧变慢。该数组用于存储先前的 x,y 位置,然后拖尾线使用这些位置来绘制自身。有没有办法让我的对象以相同的速度移动,同时保持整个拖尾线,即我不希望拖尾线在任何时间点消失/消失。<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=1.0"/><style>canvas { border:1px solid #d3d3d3; background-color: #f1f1f1;}</style></head><body onload="startGame()"><script>var myGamePiece;var myArrayX = [];var myArrayY = [];function startGame() { myGamePiece = new component(30, 30, "red", 10, 120); myGameArea.start();}var myGameArea = { canvas : document.createElement("canvas"), start : function() { this.canvas.width = 480; this.canvas.height = 270; this.context = this.canvas.getContext("2d"); document.body.insertBefore(this.canvas, document.body.childNodes[0]); this.interval = setInterval(updateGameArea, 20); }, clear : function() { this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); } }function component(width, height, color, x, y) { this.width = width; this.height = height; this.speedX = 0; this.speedY = 0; this.x = x; this.y = y; this.update = function() { ctx = myGameArea.context; ctx.fillStyle = color; ctx.fillRect(this.x, this.y, this.width, this.height); // testing: ctx.beginPath(); ctx.strokeStyle = "red"; ctx.setLineDash([5,5]); ctx.moveTo(10, 120); var arrLength = myArrayX.length; for(var i=0; i<arrLength;i+=1){ ctx.lineTo(myArrayX[i], myArrayY[i]); ctx.stroke(); } } this.newPos = function() { this.x += this.speedX; this.y += this.speedY; myArrayX.push(this.x); myArrayY.push(this.y); } //end test}function updateGameArea() { myGameArea.clear(); myGamePiece.newPos(); myGamePiece.update(); document.getElementById("test").innerHTML = "size of array: " + (myArrayX.length -1).toString()}
添加回答
举报
0/150
提交
取消